tokens) {
+ final var arr = tokens.toArray(new IncrementalToken[0]);
+ for (int i = 0; i < types.length; i++) {
+ if (types[i] != arr[i].getType()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns the token types which start and end a multiline token.
+ *
+ * @return A 2xn matrix where int[] at index 0 specifies token types which start a
+ * multiline token and int[] 1 specifies tokens which end the multiline token. For example,
+ * [['/', '*'], ['*', '/']].
+ *
But instead of characters, there must be token types.
+ * @see JavaIncrementalAnalyzeManager
+ */
+ protected abstract int[][] getMultilineTokenStartEndTypes();
+
+ /**
+ * Generate spans for the given {@link LineTokenizeResult}.
+ *
+ * @param tokens The tokenization result.
+ * @return The spans for the tokens.
+ */
+ protected abstract MappedSpans.Builder generateSpans(
+ final AsyncLineTokenizeResult tokens);
+
+ /**
+ * Called when the analyzer finds an incomplete token in a lne.
+ *
+ * @param token The incomplete token.
+ */
+ protected abstract void handleIncompleteToken(IncrementalToken token);
+
+ /**
+ * Gets the next token from lexer and return an {@link IncrementalToken}.
+ *
+ * @return The next {@link IncrementalToken}.
+ */
+ protected IncrementalToken nextToken() {
+ return new IncrementalToken(lexer.nextToken());
+ }
+
+ @NonNull
+ protected CharStream createStream(@NonNull CharSequence source) {
+ Objects.requireNonNull(source);
+ try {
+ return CharStreams.fromReader(new CharSequenceReader(source));
+ } catch (IOException e) {
+ throw new RuntimeException("Cannot create CharStream for source", e);
+ }
+ }
+
+ protected void markDiagnostics(MappedSpans.Builder spans, List diagnostics) {
+ diagnostics.sort(DiagnosticItem.START_COMPARATOR);
+ for (var d : diagnostics) {
+ if (d == null) {
+ continue;
+ }
+
+ var start = d.getRange().getStart();
+ var end = d.getRange().getEnd();
+
+ try {
+ spans.markProblemRegion(
+ convertToSpanFlag(d.getSeverity()),
+ start.getLine(),
+ start.getColumn(),
+ end.getLine(),
+ end.getColumn());
+ } catch (Throwable e) {
+ // Might happen frequently if user types faster
+ }
+ }
+ }
+
+ @Contract(pure = true)
+ private int convertToSpanFlag(@NonNull DiagnosticSeverity severity) {
+ switch (severity) {
+ case WARNING:
+ return Span.FLAG_WARNING;
+ case ERROR:
+ return Span.FLAG_ERROR;
+ case HINT:
+ case INFO:
+ default:
+ return Span.FLAG_TYPO;
+ }
+ }
+
+ @Override
+ public void updateDiagnostics(@NonNull final List diagnostics) {
+ this.diagnostics = diagnostics;
+ }
+
+ @NonNull
+ @Override
+ public List getDiagnostics() {
+ final var result = new ArrayList<>(ideDiagnostics);
+ if (diagnostics != null && !diagnostics.isEmpty()) {
+ result.addAll(diagnostics);
+ }
+ result.sort(DiagnosticItem.START_COMPARATOR);
+ return result;
+ }
+
+ @Override
+ public LineState getInitialState() {
+ return new LineState();
+ }
+
+ @Override
+ public boolean stateEquals(final LineState state, final LineState another) {
+ return state.equals(another);
+ }
+
+ @Override
+ public AsyncLineTokenizeResult tokenizeLine(
+ final CharSequence line, final LineState state) {
+ LOG.debug("Tokenize lines:", line);
+ final var tokens = new ArrayList();
+ var newState = 0;
+ var stateObj = new LineState();
+ if (state.state == NORMAL) {
+ newState = tokenizeNormal(line, 0, tokens, stateObj);
+ } else if (state.state == INCOMPLETE) {
+ final var result = fillIncomplete(line, tokens);
+ newState = IntPair.getFirst(result);
+ if (newState == NORMAL) {
+ newState = tokenizeNormal(line, IntPair.getSecond(result), tokens, stateObj);
+ } else {
+ newState = INCOMPLETE;
+ }
+ }
+ stateObj.state = newState;
+ return new AsyncLineTokenizeResult<>(stateObj, tokens);
+ }
+
+ /**
+ * Called when the state in {@link #tokenizeLine(CharSequence, LineState)} is {@link
+ * LineState#NORMAL}.
+ *
+ * @param line The line source.
+ * @param column The column in line.
+ * @param tokens The list of tokens that must be updated as the line is scanned.
+ * @param st The state object whose state must be after after the line has been
+ * scanned.
+ * @return The new state.
+ */
+ @SuppressWarnings("UnstableApiUsage")
+ protected int tokenizeNormal(
+ final CharSequence line,
+ final int column,
+ final List tokens,
+ final LineState st) {
+ lexer.setInputStream(createStream(line));
+ final var queues = createEvictingQueueForTokens();
+ final var start = queues.getFirst();
+ final var end = queues.getSecond();
+ var isInIncompleteToken = false;
+ var state = NORMAL;
+ IncrementalToken token;
+ IncrementalToken incompleteToken = null;
+
+ while ((token = nextToken()) != null) {
+ if (token.getType() == IncrementalToken.EOF) {
+ break;
+ }
+
+ // Skip to the token just after 'column'
+ if (token.getStartIndex() < column) {
+ continue;
+ }
+
+ if (!isInIncompleteToken) {
+ if (token.getStartIndex() == column && !tokens.isEmpty()) {
+ token.type = tokens.get(tokens.size() - 1).getType();
+ }
+
+ tokens.add(token);
+ }
+ start.add(token);
+ end.add(token);
+ final var type = token.getType();
+ if (type == JavaLexer.LBRACE || type == JavaLexer.RBRACE) {
+ st.hasBraces = true;
+ }
+
+ if (start.remainingCapacity() == 0 && isIncompleteTokenStart(start)) {
+ isInIncompleteToken = true;
+ incompleteToken = start.poll();
+
+ // Comment starts from the '/' token
+ // So we have to remove the '*' token after '/'
+ tokens.remove(tokens.size() - 1);
+ } else if (end.remainingCapacity() == 0 && isIncompleteTokenEnd(end)) {
+ // This should most probably not happen because, if a comment starts and ends on the same
+ // line, the lexer will create a token for the whole comment
+ // But still we handle this case...
+ isInIncompleteToken = false;
+ incompleteToken = null;
+ }
+
+ if (isInIncompleteToken) {
+ state = INCOMPLETE;
+ }
+ }
+
+ if (incompleteToken != null) {
+ incompleteToken.incomplete = true;
+ handleIncompleteToken(incompleteToken);
+ }
+
+ return state;
+ }
+
+ /**
+ * Called when the state in {@link #tokenizeLine(CharSequence, LineState)} is {@link
+ * LineState#INCOMPLETE}.
+ *
+ * @param line The line source.
+ * @param tokens The list of tokens that must be updated as the line is scanned.
+ * @return The state and offset.
+ */
+ @SuppressWarnings("UnstableApiUsage")
+ protected long fillIncomplete(CharSequence line, final List tokens) {
+ lexer.setInputStream(createStream(line));
+ final var queue = createEvictingQueueForTokens();
+ final var end = queue.getSecond();
+ final var allTokens =
+ lexer.getAllTokens().stream().map(IncrementalToken::new).collect(Collectors.toList());
+ var completed = false;
+ var index = 0;
+ for (index = 0; index < allTokens.size(); index++) {
+ final IncrementalToken token = allTokens.get(index);
+ if (token.getType() == Token.EOF) {
+ break;
+ }
+
+ end.add(token);
+ if (end.remainingCapacity() == 0 && isIncompleteTokenEnd(end)) {
+ completed = true;
+ break;
+ }
+ }
+
+ final var first = allTokens.get(0);
+ final int offset = allTokens.get(completed ? index : index - 1).getStartIndex();
+ first.startIndex = 0;
+ handleIncompleteToken(first);
+ tokens.add(first);
+ if (completed) {
+ return IntPair.pack(NORMAL, offset);
+ } else {
+ return IntPair.pack(INCOMPLETE, offset);
+ }
+ }
+
+ @Override
+ public List generateSpansForLine(
+ final AsyncLineTokenizeResult tokens) {
+ var spans = generateSpans(tokens);
+ spans.determine(tokens.line);
+
+ List result;
+ try {
+ result = new ArrayList<>(spans.build().read().getSpansOnLine(tokens.line));
+ } catch (Throwable err) {
+ result = new ArrayList<>();
+ }
+
+ if (result.isEmpty()) {
+ result.add(Span.obtain(0, TextStyle.makeStyle(SchemeAndroidIDE.TEXT_NORMAL)));
+ }
+
+ // TODO Mark diagnostics in spans.
+
+ return result;
+ }
+}
diff --git a/app/src/main/java/com/itsaky/androidide/language/incremental/IncrementalToken.kt b/app/src/main/java/com/itsaky/androidide/language/incremental/IncrementalToken.kt
new file mode 100644
index 000000000..380070f74
--- /dev/null
+++ b/app/src/main/java/com/itsaky/androidide/language/incremental/IncrementalToken.kt
@@ -0,0 +1,48 @@
+/*
+ * This file is part of AndroidIDE.
+ *
+ * AndroidIDE is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AndroidIDE 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 General Public License
+ * along with AndroidIDE. If not, see .
+ */
+
+package com.itsaky.androidide.language.incremental
+
+import org.antlr.v4.runtime.CharStream
+import org.antlr.v4.runtime.Token
+import org.antlr.v4.runtime.TokenSource
+
+/**
+ * Token used for incremental lexing tasks. Allows us to store other information to tokens.
+ *
+ * @author Akash Yadav
+ */
+class IncrementalToken(val token: Token) : Token {
+
+ @JvmField var type = token.type
+ @JvmField var startIndex = token.startIndex
+ @JvmField var incomplete = false
+
+ override fun getText(): String = token.text
+ override fun getType() = type
+ override fun getLine() = token.line
+ override fun getCharPositionInLine() = token.charPositionInLine
+ override fun getChannel() = token.channel
+ override fun getTokenIndex() = token.tokenIndex
+ override fun getStartIndex() = startIndex
+ override fun getStopIndex() = token.stopIndex
+ override fun getTokenSource(): TokenSource = token.tokenSource
+ override fun getInputStream(): CharStream = token.inputStream
+ override fun equals(other: Any?) = token == other
+ override fun hashCode() = token.hashCode()
+ override fun toString() = token.toString()
+}
diff --git a/app/src/main/java/com/itsaky/androidide/language/incremental/LineState.kt b/app/src/main/java/com/itsaky/androidide/language/incremental/LineState.kt
new file mode 100644
index 000000000..496432095
--- /dev/null
+++ b/app/src/main/java/com/itsaky/androidide/language/incremental/LineState.kt
@@ -0,0 +1,66 @@
+/*
+ * This file is part of AndroidIDE.
+ *
+ * AndroidIDE is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AndroidIDE 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 General Public License
+ * along with AndroidIDE. If not, see .
+ */
+
+package com.itsaky.androidide.language.incremental
+
+import com.itsaky.lsp.models.DiagnosticItem
+
+/**
+ * Tokenization state of a line.
+ *
+ * @author Akash Yadav
+ */
+class LineState {
+
+ companion object {
+ const val NORMAL = 0
+ const val INCOMPLETE = 1
+ }
+
+ @JvmField var state = NORMAL
+ @JvmField var hasBraces = false
+ @JvmField var diagnostics: DiagnosticsState? = null
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as LineState
+
+ if (state != other.state) return false
+ if (hasBraces != other.hasBraces) return false
+ if (diagnostics != other.diagnostics) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = state
+ result = 31 * result + hasBraces.hashCode()
+ result = 31 * result + (diagnostics?.hashCode() ?: 0)
+ return result
+ }
+
+ override fun toString(): String {
+ return "LineState(state=$state, hasBraces=$hasBraces, diagnostics=$diagnostics)"
+ }
+}
+
+data class DiagnosticsState(
+ val continueDiagnostic: Boolean = false,
+ val diagnostic: DiagnosticItem? = null
+)
diff --git a/app/src/main/java/com/itsaky/androidide/language/java/JavaIncrementalAnalyzeManager.kt b/app/src/main/java/com/itsaky/androidide/language/java/JavaIncrementalAnalyzeManager.kt
new file mode 100644
index 000000000..15fd80c72
--- /dev/null
+++ b/app/src/main/java/com/itsaky/androidide/language/java/JavaIncrementalAnalyzeManager.kt
@@ -0,0 +1,239 @@
+/*
+ * This file is part of AndroidIDE.
+ *
+ * AndroidIDE is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AndroidIDE 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 General Public License
+ * along with AndroidIDE. If not, see .
+ */
+package com.itsaky.androidide.language.java
+
+import com.itsaky.androidide.language.incremental.BaseIncrementalAnalyzeManager
+import com.itsaky.androidide.language.incremental.IncrementalToken
+import com.itsaky.androidide.language.incremental.LineState
+import com.itsaky.androidide.lexers.java.JavaLexer
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.ANNOTATION
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.COMMENT
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.FIXME_COMMENT
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.LITERAL
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.OPERATOR
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TEXT_NORMAL
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TODO_COMMENT
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TYPE_NAME
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forComment
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString
+import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.withoutCompletion
+import com.itsaky.androidide.utils.ILogger
+import com.itsaky.lsp.models.DiagnosticItem
+import com.itsaky.lsp.models.DiagnosticSeverity.WARNING
+import com.itsaky.lsp.models.Position
+import com.itsaky.lsp.models.Range
+import io.github.rosemoe.sora.lang.styling.CodeBlock
+import io.github.rosemoe.sora.lang.styling.MappedSpans
+import io.github.rosemoe.sora.lang.styling.Span
+import io.github.rosemoe.sora.lang.styling.TextStyle.makeStyle
+import io.github.rosemoe.sora.text.Content
+import org.antlr.v4.runtime.CharStreams
+
+/** @author Akash Yadav */
+class JavaIncrementalAnalyzeManager :
+ BaseIncrementalAnalyzeManager(JavaLexer(CharStreams.fromString(""))) {
+
+ private val log = ILogger.newInstance(javaClass.simpleName)
+
+ override fun computeBlocks(text: Content, delegate: CodeBlockAnalyzeDelegate): List {
+ return emptyList()
+ }
+
+ override fun generateSpans(
+ tokens: AsyncLineTokenizeResult,
+ ): MappedSpans.Builder {
+ val line = tokens.line
+ val spans = MappedSpans.Builder(1)
+ var previous = JavaLexer.WS
+ var first = true
+ for (token in tokens.tokens) {
+ val type = token.type
+ val offset = token.startIndex
+ val tokenLength = token.text.length
+ when (type) {
+ JavaLexer.WS -> {
+ if (first) {
+ spans.addIfNeeded(line, offset, makeStyle(TEXT_NORMAL))
+ first = false
+ }
+ }
+ JavaLexer.ABSTRACT,
+ JavaLexer.ASSERT,
+ JavaLexer.BREAK,
+ JavaLexer.CASE,
+ JavaLexer.CATCH,
+ JavaLexer.CLASS,
+ JavaLexer.CONST,
+ JavaLexer.CONTINUE,
+ JavaLexer.DEFAULT,
+ JavaLexer.DO,
+ JavaLexer.ELSE,
+ JavaLexer.EXTENDS,
+ JavaLexer.FINAL,
+ JavaLexer.FINALLY,
+ JavaLexer.FOR,
+ JavaLexer.IF,
+ JavaLexer.GOTO,
+ JavaLexer.IMPLEMENTS,
+ JavaLexer.IMPORT,
+ JavaLexer.INSTANCEOF,
+ JavaLexer.INTERFACE,
+ JavaLexer.NATIVE,
+ JavaLexer.NEW,
+ JavaLexer.PACKAGE,
+ JavaLexer.PRIVATE,
+ JavaLexer.PROTECTED,
+ JavaLexer.PUBLIC,
+ JavaLexer.RETURN,
+ JavaLexer.STATIC,
+ JavaLexer.STRICTFP,
+ JavaLexer.SUPER,
+ JavaLexer.SWITCH,
+ JavaLexer.SYNCHRONIZED,
+ JavaLexer.THIS,
+ JavaLexer.THROW,
+ JavaLexer.THROWS,
+ JavaLexer.TRANSIENT,
+ JavaLexer.TRY,
+ JavaLexer.VOID,
+ JavaLexer.VOLATILE,
+ JavaLexer.WHILE,
+ JavaLexer.VAR, -> spans.addIfNeeded(line, offset, forKeyword())
+ JavaLexer.DECIMAL_LITERAL,
+ JavaLexer.HEX_LITERAL,
+ JavaLexer.OCT_LITERAL,
+ JavaLexer.BINARY_LITERAL,
+ JavaLexer.FLOAT_LITERAL,
+ JavaLexer.HEX_FLOAT_LITERAL,
+ JavaLexer.BOOL_LITERAL,
+ JavaLexer.CHAR_LITERAL,
+ JavaLexer.NULL_LITERAL, -> spans.addIfNeeded(line, offset, makeStyle(LITERAL))
+ JavaLexer.STRING_LITERAL -> spans.addIfNeeded(line, offset, forString())
+ JavaLexer.LPAREN,
+ JavaLexer.RPAREN,
+ JavaLexer.LBRACK,
+ JavaLexer.RBRACK,
+ JavaLexer.SEMI,
+ JavaLexer.COMMA,
+ JavaLexer.ASSIGN,
+ JavaLexer.GT,
+ JavaLexer.LT,
+ JavaLexer.BANG,
+ JavaLexer.TILDE,
+ JavaLexer.QUESTION,
+ JavaLexer.COLON,
+ JavaLexer.EQUAL,
+ JavaLexer.GE,
+ JavaLexer.LE,
+ JavaLexer.NOTEQUAL,
+ JavaLexer.AND,
+ JavaLexer.OR,
+ JavaLexer.INC,
+ JavaLexer.DEC,
+ JavaLexer.ADD,
+ JavaLexer.SUB,
+ JavaLexer.MUL,
+ JavaLexer.DIV,
+ JavaLexer.BITAND,
+ JavaLexer.BITOR,
+ JavaLexer.CARET,
+ JavaLexer.MOD,
+ JavaLexer.ADD_ASSIGN,
+ JavaLexer.SUB_ASSIGN,
+ JavaLexer.MUL_ASSIGN,
+ JavaLexer.DIV_ASSIGN,
+ JavaLexer.AND_ASSIGN,
+ JavaLexer.OR_ASSIGN,
+ JavaLexer.XOR_ASSIGN,
+ JavaLexer.MOD_ASSIGN,
+ JavaLexer.LSHIFT_ASSIGN,
+ JavaLexer.RSHIFT_ASSIGN,
+ JavaLexer.URSHIFT_ASSIGN,
+ JavaLexer.ARROW,
+ JavaLexer.COLONCOLON,
+ JavaLexer.ELLIPSIS,
+ JavaLexer.LBRACE,
+ JavaLexer.RBRACE,
+ JavaLexer.DOT, -> spans.addIfNeeded(line, offset, makeStyle(OPERATOR))
+ JavaLexer.BOOLEAN,
+ JavaLexer.BYTE,
+ JavaLexer.CHAR,
+ JavaLexer.DOUBLE,
+ JavaLexer.ENUM,
+ JavaLexer.FLOAT,
+ JavaLexer.INT,
+ JavaLexer.LONG,
+ JavaLexer.SHORT, -> spans.addIfNeeded(line, offset, makeStyle(TYPE_NAME))
+ JavaLexer.BLOCK_COMMENT -> spans.addIfNeeded(line, offset, forComment())
+ JavaLexer.LINE_COMMENT -> {
+ var commentType = COMMENT
+
+ // highlight special line comments
+ var commentText = token.text
+ if (commentText.length > 2) {
+ commentText = commentText.substring(2)
+ commentText = commentText.trim { it <= ' ' }
+ var mark = true
+ if ("todo".equals(commentText.substring(0, 4), ignoreCase = true)) {
+ commentType = TODO_COMMENT
+ } else if ("fixme".equals(commentText.substring(0, 5), ignoreCase = true)) {
+ commentType = FIXME_COMMENT
+ } else {
+ mark = false
+ }
+ if (mark) {
+ if (diagnostics == null) {
+ diagnostics = ArrayList()
+ }
+ val diagnostic = DiagnosticItem()
+ diagnostic.severity = WARNING
+ diagnostic.message = commentText
+ diagnostic.code = "special.comment"
+ diagnostic.range = Range(Position(0, offset), Position(0, offset + tokenLength))
+ diagnostic.source = commentText
+ ideDiagnostics.add(diagnostic)
+ }
+ }
+ spans.addIfNeeded(line, offset, withoutCompletion(commentType))
+ }
+ JavaLexer.AT -> spans.addIfNeeded(line, offset, makeStyle(ANNOTATION))
+ JavaLexer.IDENTIFIER -> {
+ var colorId = TEXT_NORMAL
+ if (previous == JavaLexer.AT) {
+ colorId = ANNOTATION
+ }
+ spans.addIfNeeded(line, offset, makeStyle(colorId))
+ }
+ else -> spans.addIfNeeded(line, offset, makeStyle(TEXT_NORMAL))
+ }
+ previous = type
+ }
+
+ return spans;
+ }
+
+ override fun getMultilineTokenStartEndTypes(): Array {
+ val start = intArrayOf(JavaLexer.DIV, JavaLexer.MUL)
+ val end = intArrayOf(JavaLexer.MUL, JavaLexer.DIV)
+ return arrayOf(start, end)
+ }
+
+ override fun handleIncompleteToken(token: IncrementalToken) {
+ token.type = JavaLexer.BLOCK_COMMENT
+ }
+}
diff --git a/app/src/main/java/com/itsaky/androidide/language/java/JavaLanguage.java b/app/src/main/java/com/itsaky/androidide/language/java/JavaLanguage.java
index 3d7c22946..80cf11342 100755
--- a/app/src/main/java/com/itsaky/androidide/language/java/JavaLanguage.java
+++ b/app/src/main/java/com/itsaky/androidide/language/java/JavaLanguage.java
@@ -54,12 +54,12 @@ public class JavaLanguage extends IDELanguage {
private static final ILogger LOG = ILogger.newInstance("JavaLanguage");
private final NewlineHandler[] newlineHandlers;
- private JavaAnalyzer analyzer;
+ private JavaIncrementalAnalyzeManager analyzer;
private CommonCompletionProvider completer;
public JavaLanguage() {
final var server = getLanguageServer();
- this.analyzer = new JavaAnalyzer();
+ this.analyzer = new JavaIncrementalAnalyzeManager();
this.completer = new CommonCompletionProvider(server);
this.newlineHandlers = new NewlineHandler[1];
diff --git a/app/src/test/java/com/itsaky/androidide/language/incremental/BaseIncrementalAnalyzeManagerTest.kt b/app/src/test/java/com/itsaky/androidide/language/incremental/BaseIncrementalAnalyzeManagerTest.kt
new file mode 100644
index 000000000..7653dc0c8
--- /dev/null
+++ b/app/src/test/java/com/itsaky/androidide/language/incremental/BaseIncrementalAnalyzeManagerTest.kt
@@ -0,0 +1,137 @@
+/*
+ * This file is part of AndroidIDE.
+ *
+ * AndroidIDE is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AndroidIDE 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 General Public License
+ * along with AndroidIDE. If not, see .
+ */
+
+package com.itsaky.androidide.language.incremental
+
+import com.google.common.truth.Truth.assertThat
+import com.itsaky.androidide.language.java.JavaIncrementalAnalyzeManager
+import com.itsaky.androidide.lexers.java.JavaLexer
+import io.github.rosemoe.sora.lang.analysis.IncrementalAnalyzeManager.LineTokenizeResult
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+
+@RunWith(RobolectricTestRunner::class)
+@Config(manifest = Config.NONE)
+internal class BaseIncrementalAnalyzeManagerTest {
+
+ @Test
+ fun testSimpleTokenization() {
+ val analyzer = JavaIncrementalAnalyzeManager()
+ val result =
+ analyzer.tokenizeLine(
+ "public static final String THIS_IS_A_STRING = \"This is a string...!\";",
+ analyzer.initialState
+ )
+ println("New state: ${result.state}")
+ ensureTokenSequence(
+ result,
+ listOf(
+ JavaLexer.PUBLIC,
+ JavaLexer.WS,
+ JavaLexer.STATIC,
+ JavaLexer.WS,
+ JavaLexer.FINAL,
+ JavaLexer.WS,
+ JavaLexer.IDENTIFIER,
+ JavaLexer.WS,
+ JavaLexer.IDENTIFIER,
+ JavaLexer.WS,
+ JavaLexer.ASSIGN,
+ JavaLexer.WS,
+ JavaLexer.STRING_LITERAL,
+ JavaLexer.SEMI
+ )
+ )
+ }
+
+ @Test
+ fun testCompleteCommentTokenization() {
+ val analyzer = JavaIncrementalAnalyzeManager()
+ val result =
+ analyzer.tokenizeLine("/*This is a */complete multiline comment", analyzer.initialState)
+ assertThat(result.state.state).isEqualTo(LineState.NORMAL)
+ ensureTokenSequence(
+ result,
+ listOf(
+ JavaLexer.BLOCK_COMMENT,
+ JavaLexer.IDENTIFIER,
+ JavaLexer.WS,
+ JavaLexer.IDENTIFIER,
+ JavaLexer.WS,
+ JavaLexer.IDENTIFIER
+ )
+ )
+ }
+
+ @Test
+ fun testIncompleteCommentTokenization() {
+ val analyzer = JavaIncrementalAnalyzeManager()
+ var result =
+ analyzer.tokenizeLine("/*This is an incomplete multiline comment", analyzer.initialState)
+ println(result.state)
+ assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
+
+ result =
+ analyzer.tokenizeLine("/*This is an incomplete*//* multiline comment", analyzer.initialState)
+ println(result.state)
+ assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
+
+ result =
+ analyzer.tokenizeLine("This is an incomplete multiline comment/*", analyzer.initialState)
+ println(result.state)
+ assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
+ }
+
+ @Test
+ fun testMultilineCommentTokenization() {
+ val analyzer = JavaIncrementalAnalyzeManager()
+
+ // Test a simple multiline comment
+ run {
+ var result = analyzer.tokenizeLine("/** This is an", analyzer.initialState)
+ assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
+
+ result = analyzer.tokenizeLine(" incomplete comment*/", result.state)
+ assertThat(result.state.state).isEqualTo(LineState.NORMAL)
+ }
+
+ // Test a multiline comment which is directly followed by tokens of other types.
+ run {
+ var result = analyzer.tokenizeLine("/** This is an", analyzer.initialState)
+ assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
+ assertThat(result.tokens.last()).isNotNull()
+ assertThat(result.tokens.last().type).isEqualTo(JavaLexer.IDENTIFIER)
+
+ result = analyzer.tokenizeLine(" incomplete comment*/ public static void", result.state)
+ assertThat(result.state.state).isEqualTo(LineState.NORMAL)
+ assertThat(result.tokens.last().type).isEqualTo(JavaLexer.VOID)
+ assertThat(result.tokens[result.tokens.lastIndex - 1].type).isEqualTo(JavaLexer.WS)
+ assertThat(result.tokens[result.tokens.lastIndex - 2].type).isEqualTo(JavaLexer.STATIC)
+ }
+ }
+
+ private fun ensureTokenSequence(
+ result: LineTokenizeResult,
+ types: List
+ ) {
+ for (index in types.indices) {
+ assertThat(result.tokens[index].type).isEqualTo(types[index])
+ }
+ }
+}
diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 54a8af558..c326bdda0 100755
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -12,7 +12,7 @@ ext {
bll: 'com.github.Rosemoe:BlockLinkedList:1.0.0',
xml2json: 'com.github.smart-fun:XmlToJson:1.5.1',
jsoup: 'org.jsoup:jsoup:1.14.2',
- antlr4: 'org.antlr:antlr4-runtime:4.9.2',
+ antlr4: 'org.antlr:antlr4-runtime:4.9.3',
javaparser: 'com.github.javaparser:javaparser-symbol-solver-core:3.24.2',
jsonrpc: 'org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.12.0',
lang3:'org.apache.commons:commons-lang3:3.12.0',
diff --git a/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.interp b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.interp
new file mode 100644
index 000000000..8b34be36c
--- /dev/null
+++ b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.interp
@@ -0,0 +1,360 @@
+token literal names:
+null
+'abstract'
+'assert'
+'boolean'
+'break'
+'byte'
+'case'
+'catch'
+'char'
+'class'
+'const'
+'continue'
+'default'
+'do'
+'double'
+'else'
+'enum'
+'extends'
+'final'
+'finally'
+'float'
+'for'
+'if'
+'goto'
+'implements'
+'import'
+'instanceof'
+'int'
+'interface'
+'long'
+'native'
+'new'
+'package'
+'private'
+'protected'
+'public'
+'return'
+'short'
+'static'
+'strictfp'
+'super'
+'switch'
+'synchronized'
+'this'
+'throw'
+'throws'
+'transient'
+'try'
+'var'
+'void'
+'volatile'
+'while'
+null
+null
+null
+null
+null
+null
+null
+null
+null
+'null'
+'('
+')'
+'{'
+'}'
+'['
+']'
+';'
+','
+'.'
+'='
+'>'
+'<'
+'!'
+'~'
+'?'
+':'
+'=='
+'<='
+'>='
+'!='
+'&&'
+'||'
+'++'
+'--'
+'+'
+'-'
+'*'
+'/'
+'&'
+'|'
+'^'
+'%'
+'+='
+'-='
+'*='
+'/='
+'&='
+'|='
+'^='
+'%='
+'<<='
+'>>='
+'>>>='
+'->'
+'::'
+'@'
+'...'
+null
+null
+null
+null
+
+token symbolic names:
+null
+ABSTRACT
+ASSERT
+BOOLEAN
+BREAK
+BYTE
+CASE
+CATCH
+CHAR
+CLASS
+CONST
+CONTINUE
+DEFAULT
+DO
+DOUBLE
+ELSE
+ENUM
+EXTENDS
+FINAL
+FINALLY
+FLOAT
+FOR
+IF
+GOTO
+IMPLEMENTS
+IMPORT
+INSTANCEOF
+INT
+INTERFACE
+LONG
+NATIVE
+NEW
+PACKAGE
+PRIVATE
+PROTECTED
+PUBLIC
+RETURN
+SHORT
+STATIC
+STRICTFP
+SUPER
+SWITCH
+SYNCHRONIZED
+THIS
+THROW
+THROWS
+TRANSIENT
+TRY
+VAR
+VOID
+VOLATILE
+WHILE
+DECIMAL_LITERAL
+HEX_LITERAL
+OCT_LITERAL
+BINARY_LITERAL
+FLOAT_LITERAL
+HEX_FLOAT_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+NULL_LITERAL
+LPAREN
+RPAREN
+LBRACE
+RBRACE
+LBRACK
+RBRACK
+SEMI
+COMMA
+DOT
+ASSIGN
+GT
+LT
+BANG
+TILDE
+QUESTION
+COLON
+EQUAL
+LE
+GE
+NOTEQUAL
+AND
+OR
+INC
+DEC
+ADD
+SUB
+MUL
+DIV
+BITAND
+BITOR
+CARET
+MOD
+ADD_ASSIGN
+SUB_ASSIGN
+MUL_ASSIGN
+DIV_ASSIGN
+AND_ASSIGN
+OR_ASSIGN
+XOR_ASSIGN
+MOD_ASSIGN
+LSHIFT_ASSIGN
+RSHIFT_ASSIGN
+URSHIFT_ASSIGN
+ARROW
+COLONCOLON
+AT
+ELLIPSIS
+WS
+BLOCK_COMMENT
+LINE_COMMENT
+IDENTIFIER
+
+rule names:
+ABSTRACT
+ASSERT
+BOOLEAN
+BREAK
+BYTE
+CASE
+CATCH
+CHAR
+CLASS
+CONST
+CONTINUE
+DEFAULT
+DO
+DOUBLE
+ELSE
+ENUM
+EXTENDS
+FINAL
+FINALLY
+FLOAT
+FOR
+IF
+GOTO
+IMPLEMENTS
+IMPORT
+INSTANCEOF
+INT
+INTERFACE
+LONG
+NATIVE
+NEW
+PACKAGE
+PRIVATE
+PROTECTED
+PUBLIC
+RETURN
+SHORT
+STATIC
+STRICTFP
+SUPER
+SWITCH
+SYNCHRONIZED
+THIS
+THROW
+THROWS
+TRANSIENT
+TRY
+VAR
+VOID
+VOLATILE
+WHILE
+DECIMAL_LITERAL
+HEX_LITERAL
+OCT_LITERAL
+BINARY_LITERAL
+FLOAT_LITERAL
+HEX_FLOAT_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+NULL_LITERAL
+LPAREN
+RPAREN
+LBRACE
+RBRACE
+LBRACK
+RBRACK
+SEMI
+COMMA
+DOT
+ASSIGN
+GT
+LT
+BANG
+TILDE
+QUESTION
+COLON
+EQUAL
+LE
+GE
+NOTEQUAL
+AND
+OR
+INC
+DEC
+ADD
+SUB
+MUL
+DIV
+BITAND
+BITOR
+CARET
+MOD
+ADD_ASSIGN
+SUB_ASSIGN
+MUL_ASSIGN
+DIV_ASSIGN
+AND_ASSIGN
+OR_ASSIGN
+XOR_ASSIGN
+MOD_ASSIGN
+LSHIFT_ASSIGN
+RSHIFT_ASSIGN
+URSHIFT_ASSIGN
+ARROW
+COLONCOLON
+AT
+ELLIPSIS
+WS
+BLOCK_COMMENT
+LINE_COMMENT
+IDENTIFIER
+ExponentPart
+EscapeSequence
+HexDigits
+HexDigit
+Digits
+LetterOrDigit
+Letter
+
+channel names:
+DEFAULT_TOKEN_CHANNEL
+HIDDEN
+
+mode names:
+DEFAULT_MODE
+
+atn:
+[4, 0, 112, 951, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 3, 51, 586, 8, 51, 1, 51, 4, 51, 589, 8, 51, 11, 51, 12, 51, 590, 1, 51, 3, 51, 594, 8, 51, 3, 51, 596, 8, 51, 1, 51, 3, 51, 599, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 605, 8, 52, 10, 52, 12, 52, 608, 9, 52, 1, 52, 3, 52, 611, 8, 52, 1, 52, 3, 52, 614, 8, 52, 1, 53, 1, 53, 5, 53, 618, 8, 53, 10, 53, 12, 53, 621, 9, 53, 1, 53, 1, 53, 5, 53, 625, 8, 53, 10, 53, 12, 53, 628, 9, 53, 1, 53, 3, 53, 631, 8, 53, 1, 53, 3, 53, 634, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 640, 8, 54, 10, 54, 12, 54, 643, 9, 54, 1, 54, 3, 54, 646, 8, 54, 1, 54, 3, 54, 649, 8, 54, 1, 55, 1, 55, 1, 55, 3, 55, 654, 8, 55, 1, 55, 1, 55, 3, 55, 658, 8, 55, 1, 55, 3, 55, 661, 8, 55, 1, 55, 3, 55, 664, 8, 55, 1, 55, 1, 55, 1, 55, 3, 55, 669, 8, 55, 1, 55, 3, 55, 672, 8, 55, 3, 55, 674, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 680, 8, 56, 1, 56, 3, 56, 683, 8, 56, 1, 56, 1, 56, 3, 56, 687, 8, 56, 1, 56, 1, 56, 3, 56, 691, 8, 56, 1, 56, 1, 56, 3, 56, 695, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 706, 8, 57, 1, 58, 1, 58, 1, 58, 3, 58, 711, 8, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 718, 8, 59, 10, 59, 12, 59, 721, 9, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 4, 108, 852, 8, 108, 11, 108, 12, 108, 853, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 5, 109, 862, 8, 109, 10, 109, 12, 109, 865, 9, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 876, 8, 110, 10, 110, 12, 110, 879, 9, 110, 1, 110, 1, 110, 1, 111, 1, 111, 5, 111, 885, 8, 111, 10, 111, 12, 111, 888, 9, 111, 1, 112, 1, 112, 3, 112, 892, 8, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 900, 8, 113, 1, 113, 3, 113, 903, 8, 113, 1, 113, 1, 113, 1, 113, 4, 113, 908, 8, 113, 11, 113, 12, 113, 909, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 917, 8, 113, 1, 114, 1, 114, 1, 114, 5, 114, 922, 8, 114, 10, 114, 12, 114, 925, 9, 114, 1, 114, 3, 114, 928, 8, 114, 1, 115, 1, 115, 1, 116, 1, 116, 5, 116, 934, 8, 116, 10, 116, 12, 116, 937, 9, 116, 1, 116, 3, 116, 940, 8, 116, 1, 117, 1, 117, 3, 117, 944, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 950, 8, 118, 1, 863, 0, 119, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 0, 227, 0, 229, 0, 231, 0, 233, 0, 235, 0, 237, 0, 1, 0, 26, 1, 0, 49, 57, 2, 0, 76, 76, 108, 108, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 4, 0, 48, 57, 65, 70, 95, 95, 97, 102, 1, 0, 48, 55, 2, 0, 48, 55, 95, 95, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 48, 49, 95, 95, 4, 0, 68, 68, 70, 70, 100, 100, 102, 102, 2, 0, 80, 80, 112, 112, 2, 0, 43, 43, 45, 45, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 3, 0, 9, 10, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 69, 69, 101, 101, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 1, 0, 48, 51, 1, 0, 48, 57, 2, 0, 48, 57, 95, 95, 4, 0, 36, 36, 65, 90, 95, 95, 97, 122, 2, 0, 0, 127, 55296, 56319, 1, 0, 55296, 56319, 1, 0, 56320, 57343, 992, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 3, 248, 1, 0, 0, 0, 5, 255, 1, 0, 0, 0, 7, 263, 1, 0, 0, 0, 9, 269, 1, 0, 0, 0, 11, 274, 1, 0, 0, 0, 13, 279, 1, 0, 0, 0, 15, 285, 1, 0, 0, 0, 17, 290, 1, 0, 0, 0, 19, 296, 1, 0, 0, 0, 21, 302, 1, 0, 0, 0, 23, 311, 1, 0, 0, 0, 25, 319, 1, 0, 0, 0, 27, 322, 1, 0, 0, 0, 29, 329, 1, 0, 0, 0, 31, 334, 1, 0, 0, 0, 33, 339, 1, 0, 0, 0, 35, 347, 1, 0, 0, 0, 37, 353, 1, 0, 0, 0, 39, 361, 1, 0, 0, 0, 41, 367, 1, 0, 0, 0, 43, 371, 1, 0, 0, 0, 45, 374, 1, 0, 0, 0, 47, 379, 1, 0, 0, 0, 49, 390, 1, 0, 0, 0, 51, 397, 1, 0, 0, 0, 53, 408, 1, 0, 0, 0, 55, 412, 1, 0, 0, 0, 57, 422, 1, 0, 0, 0, 59, 427, 1, 0, 0, 0, 61, 434, 1, 0, 0, 0, 63, 438, 1, 0, 0, 0, 65, 446, 1, 0, 0, 0, 67, 454, 1, 0, 0, 0, 69, 464, 1, 0, 0, 0, 71, 471, 1, 0, 0, 0, 73, 478, 1, 0, 0, 0, 75, 484, 1, 0, 0, 0, 77, 491, 1, 0, 0, 0, 79, 500, 1, 0, 0, 0, 81, 506, 1, 0, 0, 0, 83, 513, 1, 0, 0, 0, 85, 526, 1, 0, 0, 0, 87, 531, 1, 0, 0, 0, 89, 537, 1, 0, 0, 0, 91, 544, 1, 0, 0, 0, 93, 554, 1, 0, 0, 0, 95, 558, 1, 0, 0, 0, 97, 562, 1, 0, 0, 0, 99, 567, 1, 0, 0, 0, 101, 576, 1, 0, 0, 0, 103, 595, 1, 0, 0, 0, 105, 600, 1, 0, 0, 0, 107, 615, 1, 0, 0, 0, 109, 635, 1, 0, 0, 0, 111, 673, 1, 0, 0, 0, 113, 675, 1, 0, 0, 0, 115, 705, 1, 0, 0, 0, 117, 707, 1, 0, 0, 0, 119, 714, 1, 0, 0, 0, 121, 724, 1, 0, 0, 0, 123, 729, 1, 0, 0, 0, 125, 731, 1, 0, 0, 0, 127, 733, 1, 0, 0, 0, 129, 735, 1, 0, 0, 0, 131, 737, 1, 0, 0, 0, 133, 739, 1, 0, 0, 0, 135, 741, 1, 0, 0, 0, 137, 743, 1, 0, 0, 0, 139, 745, 1, 0, 0, 0, 141, 747, 1, 0, 0, 0, 143, 749, 1, 0, 0, 0, 145, 751, 1, 0, 0, 0, 147, 753, 1, 0, 0, 0, 149, 755, 1, 0, 0, 0, 151, 757, 1, 0, 0, 0, 153, 759, 1, 0, 0, 0, 155, 761, 1, 0, 0, 0, 157, 764, 1, 0, 0, 0, 159, 767, 1, 0, 0, 0, 161, 770, 1, 0, 0, 0, 163, 773, 1, 0, 0, 0, 165, 776, 1, 0, 0, 0, 167, 779, 1, 0, 0, 0, 169, 782, 1, 0, 0, 0, 171, 785, 1, 0, 0, 0, 173, 787, 1, 0, 0, 0, 175, 789, 1, 0, 0, 0, 177, 791, 1, 0, 0, 0, 179, 793, 1, 0, 0, 0, 181, 795, 1, 0, 0, 0, 183, 797, 1, 0, 0, 0, 185, 799, 1, 0, 0, 0, 187, 801, 1, 0, 0, 0, 189, 804, 1, 0, 0, 0, 191, 807, 1, 0, 0, 0, 193, 810, 1, 0, 0, 0, 195, 813, 1, 0, 0, 0, 197, 816, 1, 0, 0, 0, 199, 819, 1, 0, 0, 0, 201, 822, 1, 0, 0, 0, 203, 825, 1, 0, 0, 0, 205, 829, 1, 0, 0, 0, 207, 833, 1, 0, 0, 0, 209, 838, 1, 0, 0, 0, 211, 841, 1, 0, 0, 0, 213, 844, 1, 0, 0, 0, 215, 846, 1, 0, 0, 0, 217, 851, 1, 0, 0, 0, 219, 857, 1, 0, 0, 0, 221, 871, 1, 0, 0, 0, 223, 882, 1, 0, 0, 0, 225, 889, 1, 0, 0, 0, 227, 916, 1, 0, 0, 0, 229, 918, 1, 0, 0, 0, 231, 929, 1, 0, 0, 0, 233, 931, 1, 0, 0, 0, 235, 943, 1, 0, 0, 0, 237, 949, 1, 0, 0, 0, 239, 240, 5, 97, 0, 0, 240, 241, 5, 98, 0, 0, 241, 242, 5, 115, 0, 0, 242, 243, 5, 116, 0, 0, 243, 244, 5, 114, 0, 0, 244, 245, 5, 97, 0, 0, 245, 246, 5, 99, 0, 0, 246, 247, 5, 116, 0, 0, 247, 2, 1, 0, 0, 0, 248, 249, 5, 97, 0, 0, 249, 250, 5, 115, 0, 0, 250, 251, 5, 115, 0, 0, 251, 252, 5, 101, 0, 0, 252, 253, 5, 114, 0, 0, 253, 254, 5, 116, 0, 0, 254, 4, 1, 0, 0, 0, 255, 256, 5, 98, 0, 0, 256, 257, 5, 111, 0, 0, 257, 258, 5, 111, 0, 0, 258, 259, 5, 108, 0, 0, 259, 260, 5, 101, 0, 0, 260, 261, 5, 97, 0, 0, 261, 262, 5, 110, 0, 0, 262, 6, 1, 0, 0, 0, 263, 264, 5, 98, 0, 0, 264, 265, 5, 114, 0, 0, 265, 266, 5, 101, 0, 0, 266, 267, 5, 97, 0, 0, 267, 268, 5, 107, 0, 0, 268, 8, 1, 0, 0, 0, 269, 270, 5, 98, 0, 0, 270, 271, 5, 121, 0, 0, 271, 272, 5, 116, 0, 0, 272, 273, 5, 101, 0, 0, 273, 10, 1, 0, 0, 0, 274, 275, 5, 99, 0, 0, 275, 276, 5, 97, 0, 0, 276, 277, 5, 115, 0, 0, 277, 278, 5, 101, 0, 0, 278, 12, 1, 0, 0, 0, 279, 280, 5, 99, 0, 0, 280, 281, 5, 97, 0, 0, 281, 282, 5, 116, 0, 0, 282, 283, 5, 99, 0, 0, 283, 284, 5, 104, 0, 0, 284, 14, 1, 0, 0, 0, 285, 286, 5, 99, 0, 0, 286, 287, 5, 104, 0, 0, 287, 288, 5, 97, 0, 0, 288, 289, 5, 114, 0, 0, 289, 16, 1, 0, 0, 0, 290, 291, 5, 99, 0, 0, 291, 292, 5, 108, 0, 0, 292, 293, 5, 97, 0, 0, 293, 294, 5, 115, 0, 0, 294, 295, 5, 115, 0, 0, 295, 18, 1, 0, 0, 0, 296, 297, 5, 99, 0, 0, 297, 298, 5, 111, 0, 0, 298, 299, 5, 110, 0, 0, 299, 300, 5, 115, 0, 0, 300, 301, 5, 116, 0, 0, 301, 20, 1, 0, 0, 0, 302, 303, 5, 99, 0, 0, 303, 304, 5, 111, 0, 0, 304, 305, 5, 110, 0, 0, 305, 306, 5, 116, 0, 0, 306, 307, 5, 105, 0, 0, 307, 308, 5, 110, 0, 0, 308, 309, 5, 117, 0, 0, 309, 310, 5, 101, 0, 0, 310, 22, 1, 0, 0, 0, 311, 312, 5, 100, 0, 0, 312, 313, 5, 101, 0, 0, 313, 314, 5, 102, 0, 0, 314, 315, 5, 97, 0, 0, 315, 316, 5, 117, 0, 0, 316, 317, 5, 108, 0, 0, 317, 318, 5, 116, 0, 0, 318, 24, 1, 0, 0, 0, 319, 320, 5, 100, 0, 0, 320, 321, 5, 111, 0, 0, 321, 26, 1, 0, 0, 0, 322, 323, 5, 100, 0, 0, 323, 324, 5, 111, 0, 0, 324, 325, 5, 117, 0, 0, 325, 326, 5, 98, 0, 0, 326, 327, 5, 108, 0, 0, 327, 328, 5, 101, 0, 0, 328, 28, 1, 0, 0, 0, 329, 330, 5, 101, 0, 0, 330, 331, 5, 108, 0, 0, 331, 332, 5, 115, 0, 0, 332, 333, 5, 101, 0, 0, 333, 30, 1, 0, 0, 0, 334, 335, 5, 101, 0, 0, 335, 336, 5, 110, 0, 0, 336, 337, 5, 117, 0, 0, 337, 338, 5, 109, 0, 0, 338, 32, 1, 0, 0, 0, 339, 340, 5, 101, 0, 0, 340, 341, 5, 120, 0, 0, 341, 342, 5, 116, 0, 0, 342, 343, 5, 101, 0, 0, 343, 344, 5, 110, 0, 0, 344, 345, 5, 100, 0, 0, 345, 346, 5, 115, 0, 0, 346, 34, 1, 0, 0, 0, 347, 348, 5, 102, 0, 0, 348, 349, 5, 105, 0, 0, 349, 350, 5, 110, 0, 0, 350, 351, 5, 97, 0, 0, 351, 352, 5, 108, 0, 0, 352, 36, 1, 0, 0, 0, 353, 354, 5, 102, 0, 0, 354, 355, 5, 105, 0, 0, 355, 356, 5, 110, 0, 0, 356, 357, 5, 97, 0, 0, 357, 358, 5, 108, 0, 0, 358, 359, 5, 108, 0, 0, 359, 360, 5, 121, 0, 0, 360, 38, 1, 0, 0, 0, 361, 362, 5, 102, 0, 0, 362, 363, 5, 108, 0, 0, 363, 364, 5, 111, 0, 0, 364, 365, 5, 97, 0, 0, 365, 366, 5, 116, 0, 0, 366, 40, 1, 0, 0, 0, 367, 368, 5, 102, 0, 0, 368, 369, 5, 111, 0, 0, 369, 370, 5, 114, 0, 0, 370, 42, 1, 0, 0, 0, 371, 372, 5, 105, 0, 0, 372, 373, 5, 102, 0, 0, 373, 44, 1, 0, 0, 0, 374, 375, 5, 103, 0, 0, 375, 376, 5, 111, 0, 0, 376, 377, 5, 116, 0, 0, 377, 378, 5, 111, 0, 0, 378, 46, 1, 0, 0, 0, 379, 380, 5, 105, 0, 0, 380, 381, 5, 109, 0, 0, 381, 382, 5, 112, 0, 0, 382, 383, 5, 108, 0, 0, 383, 384, 5, 101, 0, 0, 384, 385, 5, 109, 0, 0, 385, 386, 5, 101, 0, 0, 386, 387, 5, 110, 0, 0, 387, 388, 5, 116, 0, 0, 388, 389, 5, 115, 0, 0, 389, 48, 1, 0, 0, 0, 390, 391, 5, 105, 0, 0, 391, 392, 5, 109, 0, 0, 392, 393, 5, 112, 0, 0, 393, 394, 5, 111, 0, 0, 394, 395, 5, 114, 0, 0, 395, 396, 5, 116, 0, 0, 396, 50, 1, 0, 0, 0, 397, 398, 5, 105, 0, 0, 398, 399, 5, 110, 0, 0, 399, 400, 5, 115, 0, 0, 400, 401, 5, 116, 0, 0, 401, 402, 5, 97, 0, 0, 402, 403, 5, 110, 0, 0, 403, 404, 5, 99, 0, 0, 404, 405, 5, 101, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 102, 0, 0, 407, 52, 1, 0, 0, 0, 408, 409, 5, 105, 0, 0, 409, 410, 5, 110, 0, 0, 410, 411, 5, 116, 0, 0, 411, 54, 1, 0, 0, 0, 412, 413, 5, 105, 0, 0, 413, 414, 5, 110, 0, 0, 414, 415, 5, 116, 0, 0, 415, 416, 5, 101, 0, 0, 416, 417, 5, 114, 0, 0, 417, 418, 5, 102, 0, 0, 418, 419, 5, 97, 0, 0, 419, 420, 5, 99, 0, 0, 420, 421, 5, 101, 0, 0, 421, 56, 1, 0, 0, 0, 422, 423, 5, 108, 0, 0, 423, 424, 5, 111, 0, 0, 424, 425, 5, 110, 0, 0, 425, 426, 5, 103, 0, 0, 426, 58, 1, 0, 0, 0, 427, 428, 5, 110, 0, 0, 428, 429, 5, 97, 0, 0, 429, 430, 5, 116, 0, 0, 430, 431, 5, 105, 0, 0, 431, 432, 5, 118, 0, 0, 432, 433, 5, 101, 0, 0, 433, 60, 1, 0, 0, 0, 434, 435, 5, 110, 0, 0, 435, 436, 5, 101, 0, 0, 436, 437, 5, 119, 0, 0, 437, 62, 1, 0, 0, 0, 438, 439, 5, 112, 0, 0, 439, 440, 5, 97, 0, 0, 440, 441, 5, 99, 0, 0, 441, 442, 5, 107, 0, 0, 442, 443, 5, 97, 0, 0, 443, 444, 5, 103, 0, 0, 444, 445, 5, 101, 0, 0, 445, 64, 1, 0, 0, 0, 446, 447, 5, 112, 0, 0, 447, 448, 5, 114, 0, 0, 448, 449, 5, 105, 0, 0, 449, 450, 5, 118, 0, 0, 450, 451, 5, 97, 0, 0, 451, 452, 5, 116, 0, 0, 452, 453, 5, 101, 0, 0, 453, 66, 1, 0, 0, 0, 454, 455, 5, 112, 0, 0, 455, 456, 5, 114, 0, 0, 456, 457, 5, 111, 0, 0, 457, 458, 5, 116, 0, 0, 458, 459, 5, 101, 0, 0, 459, 460, 5, 99, 0, 0, 460, 461, 5, 116, 0, 0, 461, 462, 5, 101, 0, 0, 462, 463, 5, 100, 0, 0, 463, 68, 1, 0, 0, 0, 464, 465, 5, 112, 0, 0, 465, 466, 5, 117, 0, 0, 466, 467, 5, 98, 0, 0, 467, 468, 5, 108, 0, 0, 468, 469, 5, 105, 0, 0, 469, 470, 5, 99, 0, 0, 470, 70, 1, 0, 0, 0, 471, 472, 5, 114, 0, 0, 472, 473, 5, 101, 0, 0, 473, 474, 5, 116, 0, 0, 474, 475, 5, 117, 0, 0, 475, 476, 5, 114, 0, 0, 476, 477, 5, 110, 0, 0, 477, 72, 1, 0, 0, 0, 478, 479, 5, 115, 0, 0, 479, 480, 5, 104, 0, 0, 480, 481, 5, 111, 0, 0, 481, 482, 5, 114, 0, 0, 482, 483, 5, 116, 0, 0, 483, 74, 1, 0, 0, 0, 484, 485, 5, 115, 0, 0, 485, 486, 5, 116, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 116, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 99, 0, 0, 490, 76, 1, 0, 0, 0, 491, 492, 5, 115, 0, 0, 492, 493, 5, 116, 0, 0, 493, 494, 5, 114, 0, 0, 494, 495, 5, 105, 0, 0, 495, 496, 5, 99, 0, 0, 496, 497, 5, 116, 0, 0, 497, 498, 5, 102, 0, 0, 498, 499, 5, 112, 0, 0, 499, 78, 1, 0, 0, 0, 500, 501, 5, 115, 0, 0, 501, 502, 5, 117, 0, 0, 502, 503, 5, 112, 0, 0, 503, 504, 5, 101, 0, 0, 504, 505, 5, 114, 0, 0, 505, 80, 1, 0, 0, 0, 506, 507, 5, 115, 0, 0, 507, 508, 5, 119, 0, 0, 508, 509, 5, 105, 0, 0, 509, 510, 5, 116, 0, 0, 510, 511, 5, 99, 0, 0, 511, 512, 5, 104, 0, 0, 512, 82, 1, 0, 0, 0, 513, 514, 5, 115, 0, 0, 514, 515, 5, 121, 0, 0, 515, 516, 5, 110, 0, 0, 516, 517, 5, 99, 0, 0, 517, 518, 5, 104, 0, 0, 518, 519, 5, 114, 0, 0, 519, 520, 5, 111, 0, 0, 520, 521, 5, 110, 0, 0, 521, 522, 5, 105, 0, 0, 522, 523, 5, 122, 0, 0, 523, 524, 5, 101, 0, 0, 524, 525, 5, 100, 0, 0, 525, 84, 1, 0, 0, 0, 526, 527, 5, 116, 0, 0, 527, 528, 5, 104, 0, 0, 528, 529, 5, 105, 0, 0, 529, 530, 5, 115, 0, 0, 530, 86, 1, 0, 0, 0, 531, 532, 5, 116, 0, 0, 532, 533, 5, 104, 0, 0, 533, 534, 5, 114, 0, 0, 534, 535, 5, 111, 0, 0, 535, 536, 5, 119, 0, 0, 536, 88, 1, 0, 0, 0, 537, 538, 5, 116, 0, 0, 538, 539, 5, 104, 0, 0, 539, 540, 5, 114, 0, 0, 540, 541, 5, 111, 0, 0, 541, 542, 5, 119, 0, 0, 542, 543, 5, 115, 0, 0, 543, 90, 1, 0, 0, 0, 544, 545, 5, 116, 0, 0, 545, 546, 5, 114, 0, 0, 546, 547, 5, 97, 0, 0, 547, 548, 5, 110, 0, 0, 548, 549, 5, 115, 0, 0, 549, 550, 5, 105, 0, 0, 550, 551, 5, 101, 0, 0, 551, 552, 5, 110, 0, 0, 552, 553, 5, 116, 0, 0, 553, 92, 1, 0, 0, 0, 554, 555, 5, 116, 0, 0, 555, 556, 5, 114, 0, 0, 556, 557, 5, 121, 0, 0, 557, 94, 1, 0, 0, 0, 558, 559, 5, 118, 0, 0, 559, 560, 5, 97, 0, 0, 560, 561, 5, 114, 0, 0, 561, 96, 1, 0, 0, 0, 562, 563, 5, 118, 0, 0, 563, 564, 5, 111, 0, 0, 564, 565, 5, 105, 0, 0, 565, 566, 5, 100, 0, 0, 566, 98, 1, 0, 0, 0, 567, 568, 5, 118, 0, 0, 568, 569, 5, 111, 0, 0, 569, 570, 5, 108, 0, 0, 570, 571, 5, 97, 0, 0, 571, 572, 5, 116, 0, 0, 572, 573, 5, 105, 0, 0, 573, 574, 5, 108, 0, 0, 574, 575, 5, 101, 0, 0, 575, 100, 1, 0, 0, 0, 576, 577, 5, 119, 0, 0, 577, 578, 5, 104, 0, 0, 578, 579, 5, 105, 0, 0, 579, 580, 5, 108, 0, 0, 580, 581, 5, 101, 0, 0, 581, 102, 1, 0, 0, 0, 582, 596, 5, 48, 0, 0, 583, 593, 7, 0, 0, 0, 584, 586, 3, 233, 116, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 594, 1, 0, 0, 0, 587, 589, 5, 95, 0, 0, 588, 587, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 3, 233, 116, 0, 593, 585, 1, 0, 0, 0, 593, 588, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, 595, 582, 1, 0, 0, 0, 595, 583, 1, 0, 0, 0, 596, 598, 1, 0, 0, 0, 597, 599, 7, 1, 0, 0, 598, 597, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 104, 1, 0, 0, 0, 600, 601, 5, 48, 0, 0, 601, 602, 7, 2, 0, 0, 602, 610, 7, 3, 0, 0, 603, 605, 7, 4, 0, 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 611, 7, 3, 0, 0, 610, 606, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 613, 1, 0, 0, 0, 612, 614, 7, 1, 0, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 106, 1, 0, 0, 0, 615, 619, 5, 48, 0, 0, 616, 618, 5, 95, 0, 0, 617, 616, 1, 0, 0, 0, 618, 621, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 622, 630, 7, 5, 0, 0, 623, 625, 7, 6, 0, 0, 624, 623, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 631, 7, 5, 0, 0, 630, 626, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 633, 1, 0, 0, 0, 632, 634, 7, 1, 0, 0, 633, 632, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 108, 1, 0, 0, 0, 635, 636, 5, 48, 0, 0, 636, 637, 7, 7, 0, 0, 637, 645, 7, 8, 0, 0, 638, 640, 7, 9, 0, 0, 639, 638, 1, 0, 0, 0, 640, 643, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 644, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 644, 646, 7, 8, 0, 0, 645, 641, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 648, 1, 0, 0, 0, 647, 649, 7, 1, 0, 0, 648, 647, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 110, 1, 0, 0, 0, 650, 651, 3, 233, 116, 0, 651, 653, 5, 46, 0, 0, 652, 654, 3, 233, 116, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 658, 1, 0, 0, 0, 655, 656, 5, 46, 0, 0, 656, 658, 3, 233, 116, 0, 657, 650, 1, 0, 0, 0, 657, 655, 1, 0, 0, 0, 658, 660, 1, 0, 0, 0, 659, 661, 3, 225, 112, 0, 660, 659, 1, 0, 0, 0, 660, 661, 1, 0, 0, 0, 661, 663, 1, 0, 0, 0, 662, 664, 7, 10, 0, 0, 663, 662, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 674, 1, 0, 0, 0, 665, 671, 3, 233, 116, 0, 666, 668, 3, 225, 112, 0, 667, 669, 7, 10, 0, 0, 668, 667, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 672, 1, 0, 0, 0, 670, 672, 7, 10, 0, 0, 671, 666, 1, 0, 0, 0, 671, 670, 1, 0, 0, 0, 672, 674, 1, 0, 0, 0, 673, 657, 1, 0, 0, 0, 673, 665, 1, 0, 0, 0, 674, 112, 1, 0, 0, 0, 675, 676, 5, 48, 0, 0, 676, 686, 7, 2, 0, 0, 677, 679, 3, 229, 114, 0, 678, 680, 5, 46, 0, 0, 679, 678, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 687, 1, 0, 0, 0, 681, 683, 3, 229, 114, 0, 682, 681, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 5, 46, 0, 0, 685, 687, 3, 229, 114, 0, 686, 677, 1, 0, 0, 0, 686, 682, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 690, 7, 11, 0, 0, 689, 691, 7, 12, 0, 0, 690, 689, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 694, 3, 233, 116, 0, 693, 695, 7, 10, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 114, 1, 0, 0, 0, 696, 697, 5, 116, 0, 0, 697, 698, 5, 114, 0, 0, 698, 699, 5, 117, 0, 0, 699, 706, 5, 101, 0, 0, 700, 701, 5, 102, 0, 0, 701, 702, 5, 97, 0, 0, 702, 703, 5, 108, 0, 0, 703, 704, 5, 115, 0, 0, 704, 706, 5, 101, 0, 0, 705, 696, 1, 0, 0, 0, 705, 700, 1, 0, 0, 0, 706, 116, 1, 0, 0, 0, 707, 710, 5, 39, 0, 0, 708, 711, 8, 13, 0, 0, 709, 711, 3, 227, 113, 0, 710, 708, 1, 0, 0, 0, 710, 709, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 713, 5, 39, 0, 0, 713, 118, 1, 0, 0, 0, 714, 719, 5, 34, 0, 0, 715, 718, 8, 14, 0, 0, 716, 718, 3, 227, 113, 0, 717, 715, 1, 0, 0, 0, 717, 716, 1, 0, 0, 0, 718, 721, 1, 0, 0, 0, 719, 717, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 722, 1, 0, 0, 0, 721, 719, 1, 0, 0, 0, 722, 723, 5, 34, 0, 0, 723, 120, 1, 0, 0, 0, 724, 725, 5, 110, 0, 0, 725, 726, 5, 117, 0, 0, 726, 727, 5, 108, 0, 0, 727, 728, 5, 108, 0, 0, 728, 122, 1, 0, 0, 0, 729, 730, 5, 40, 0, 0, 730, 124, 1, 0, 0, 0, 731, 732, 5, 41, 0, 0, 732, 126, 1, 0, 0, 0, 733, 734, 5, 123, 0, 0, 734, 128, 1, 0, 0, 0, 735, 736, 5, 125, 0, 0, 736, 130, 1, 0, 0, 0, 737, 738, 5, 91, 0, 0, 738, 132, 1, 0, 0, 0, 739, 740, 5, 93, 0, 0, 740, 134, 1, 0, 0, 0, 741, 742, 5, 59, 0, 0, 742, 136, 1, 0, 0, 0, 743, 744, 5, 44, 0, 0, 744, 138, 1, 0, 0, 0, 745, 746, 5, 46, 0, 0, 746, 140, 1, 0, 0, 0, 747, 748, 5, 61, 0, 0, 748, 142, 1, 0, 0, 0, 749, 750, 5, 62, 0, 0, 750, 144, 1, 0, 0, 0, 751, 752, 5, 60, 0, 0, 752, 146, 1, 0, 0, 0, 753, 754, 5, 33, 0, 0, 754, 148, 1, 0, 0, 0, 755, 756, 5, 126, 0, 0, 756, 150, 1, 0, 0, 0, 757, 758, 5, 63, 0, 0, 758, 152, 1, 0, 0, 0, 759, 760, 5, 58, 0, 0, 760, 154, 1, 0, 0, 0, 761, 762, 5, 61, 0, 0, 762, 763, 5, 61, 0, 0, 763, 156, 1, 0, 0, 0, 764, 765, 5, 60, 0, 0, 765, 766, 5, 61, 0, 0, 766, 158, 1, 0, 0, 0, 767, 768, 5, 62, 0, 0, 768, 769, 5, 61, 0, 0, 769, 160, 1, 0, 0, 0, 770, 771, 5, 33, 0, 0, 771, 772, 5, 61, 0, 0, 772, 162, 1, 0, 0, 0, 773, 774, 5, 38, 0, 0, 774, 775, 5, 38, 0, 0, 775, 164, 1, 0, 0, 0, 776, 777, 5, 124, 0, 0, 777, 778, 5, 124, 0, 0, 778, 166, 1, 0, 0, 0, 779, 780, 5, 43, 0, 0, 780, 781, 5, 43, 0, 0, 781, 168, 1, 0, 0, 0, 782, 783, 5, 45, 0, 0, 783, 784, 5, 45, 0, 0, 784, 170, 1, 0, 0, 0, 785, 786, 5, 43, 0, 0, 786, 172, 1, 0, 0, 0, 787, 788, 5, 45, 0, 0, 788, 174, 1, 0, 0, 0, 789, 790, 5, 42, 0, 0, 790, 176, 1, 0, 0, 0, 791, 792, 5, 47, 0, 0, 792, 178, 1, 0, 0, 0, 793, 794, 5, 38, 0, 0, 794, 180, 1, 0, 0, 0, 795, 796, 5, 124, 0, 0, 796, 182, 1, 0, 0, 0, 797, 798, 5, 94, 0, 0, 798, 184, 1, 0, 0, 0, 799, 800, 5, 37, 0, 0, 800, 186, 1, 0, 0, 0, 801, 802, 5, 43, 0, 0, 802, 803, 5, 61, 0, 0, 803, 188, 1, 0, 0, 0, 804, 805, 5, 45, 0, 0, 805, 806, 5, 61, 0, 0, 806, 190, 1, 0, 0, 0, 807, 808, 5, 42, 0, 0, 808, 809, 5, 61, 0, 0, 809, 192, 1, 0, 0, 0, 810, 811, 5, 47, 0, 0, 811, 812, 5, 61, 0, 0, 812, 194, 1, 0, 0, 0, 813, 814, 5, 38, 0, 0, 814, 815, 5, 61, 0, 0, 815, 196, 1, 0, 0, 0, 816, 817, 5, 124, 0, 0, 817, 818, 5, 61, 0, 0, 818, 198, 1, 0, 0, 0, 819, 820, 5, 94, 0, 0, 820, 821, 5, 61, 0, 0, 821, 200, 1, 0, 0, 0, 822, 823, 5, 37, 0, 0, 823, 824, 5, 61, 0, 0, 824, 202, 1, 0, 0, 0, 825, 826, 5, 60, 0, 0, 826, 827, 5, 60, 0, 0, 827, 828, 5, 61, 0, 0, 828, 204, 1, 0, 0, 0, 829, 830, 5, 62, 0, 0, 830, 831, 5, 62, 0, 0, 831, 832, 5, 61, 0, 0, 832, 206, 1, 0, 0, 0, 833, 834, 5, 62, 0, 0, 834, 835, 5, 62, 0, 0, 835, 836, 5, 62, 0, 0, 836, 837, 5, 61, 0, 0, 837, 208, 1, 0, 0, 0, 838, 839, 5, 45, 0, 0, 839, 840, 5, 62, 0, 0, 840, 210, 1, 0, 0, 0, 841, 842, 5, 58, 0, 0, 842, 843, 5, 58, 0, 0, 843, 212, 1, 0, 0, 0, 844, 845, 5, 64, 0, 0, 845, 214, 1, 0, 0, 0, 846, 847, 5, 46, 0, 0, 847, 848, 5, 46, 0, 0, 848, 849, 5, 46, 0, 0, 849, 216, 1, 0, 0, 0, 850, 852, 7, 15, 0, 0, 851, 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 851, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 856, 6, 108, 0, 0, 856, 218, 1, 0, 0, 0, 857, 858, 5, 47, 0, 0, 858, 859, 5, 42, 0, 0, 859, 863, 1, 0, 0, 0, 860, 862, 9, 0, 0, 0, 861, 860, 1, 0, 0, 0, 862, 865, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 864, 866, 1, 0, 0, 0, 865, 863, 1, 0, 0, 0, 866, 867, 5, 42, 0, 0, 867, 868, 5, 47, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 6, 109, 0, 0, 870, 220, 1, 0, 0, 0, 871, 872, 5, 47, 0, 0, 872, 873, 5, 47, 0, 0, 873, 877, 1, 0, 0, 0, 874, 876, 8, 16, 0, 0, 875, 874, 1, 0, 0, 0, 876, 879, 1, 0, 0, 0, 877, 875, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 880, 1, 0, 0, 0, 879, 877, 1, 0, 0, 0, 880, 881, 6, 110, 0, 0, 881, 222, 1, 0, 0, 0, 882, 886, 3, 237, 118, 0, 883, 885, 3, 235, 117, 0, 884, 883, 1, 0, 0, 0, 885, 888, 1, 0, 0, 0, 886, 884, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 224, 1, 0, 0, 0, 888, 886, 1, 0, 0, 0, 889, 891, 7, 17, 0, 0, 890, 892, 7, 12, 0, 0, 891, 890, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 894, 3, 233, 116, 0, 894, 226, 1, 0, 0, 0, 895, 896, 5, 92, 0, 0, 896, 917, 7, 18, 0, 0, 897, 902, 5, 92, 0, 0, 898, 900, 7, 19, 0, 0, 899, 898, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 903, 7, 5, 0, 0, 902, 899, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 917, 7, 5, 0, 0, 905, 907, 5, 92, 0, 0, 906, 908, 5, 117, 0, 0, 907, 906, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 907, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 912, 3, 231, 115, 0, 912, 913, 3, 231, 115, 0, 913, 914, 3, 231, 115, 0, 914, 915, 3, 231, 115, 0, 915, 917, 1, 0, 0, 0, 916, 895, 1, 0, 0, 0, 916, 897, 1, 0, 0, 0, 916, 905, 1, 0, 0, 0, 917, 228, 1, 0, 0, 0, 918, 927, 3, 231, 115, 0, 919, 922, 3, 231, 115, 0, 920, 922, 5, 95, 0, 0, 921, 919, 1, 0, 0, 0, 921, 920, 1, 0, 0, 0, 922, 925, 1, 0, 0, 0, 923, 921, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 926, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 926, 928, 3, 231, 115, 0, 927, 923, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 230, 1, 0, 0, 0, 929, 930, 7, 3, 0, 0, 930, 232, 1, 0, 0, 0, 931, 939, 7, 20, 0, 0, 932, 934, 7, 21, 0, 0, 933, 932, 1, 0, 0, 0, 934, 937, 1, 0, 0, 0, 935, 933, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 935, 1, 0, 0, 0, 938, 940, 7, 20, 0, 0, 939, 935, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 234, 1, 0, 0, 0, 941, 944, 3, 237, 118, 0, 942, 944, 7, 20, 0, 0, 943, 941, 1, 0, 0, 0, 943, 942, 1, 0, 0, 0, 944, 236, 1, 0, 0, 0, 945, 950, 7, 22, 0, 0, 946, 950, 8, 23, 0, 0, 947, 948, 7, 24, 0, 0, 948, 950, 7, 25, 0, 0, 949, 945, 1, 0, 0, 0, 949, 946, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 950, 238, 1, 0, 0, 0, 48, 0, 585, 590, 593, 595, 598, 606, 610, 613, 619, 626, 630, 633, 641, 645, 648, 653, 657, 660, 663, 668, 671, 673, 679, 682, 686, 690, 694, 705, 710, 717, 719, 853, 863, 877, 886, 891, 899, 902, 909, 916, 921, 923, 927, 935, 939, 943, 949, 1, 0, 1, 0]
\ No newline at end of file
diff --git a/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.java b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.java
new file mode 100644
index 000000000..0a2d2a9d4
--- /dev/null
+++ b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.java
@@ -0,0 +1,763 @@
+// Generated from /home/itsaky/Projects/Android/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/java/JavaLexer.g4 by ANTLR 4.10.1
+package com.itsaky.androidide.lexers.java;
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.misc.*;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class JavaLexer extends Lexer {
+ static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); }
+
+ protected static final DFA[] _decisionToDFA;
+ protected static final PredictionContextCache _sharedContextCache =
+ new PredictionContextCache();
+ public static final int
+ ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8,
+ CLASS=9, CONST=10, CONTINUE=11, DEFAULT=12, DO=13, DOUBLE=14, ELSE=15,
+ ENUM=16, EXTENDS=17, FINAL=18, FINALLY=19, FLOAT=20, FOR=21, IF=22, GOTO=23,
+ IMPLEMENTS=24, IMPORT=25, INSTANCEOF=26, INT=27, INTERFACE=28, LONG=29,
+ NATIVE=30, NEW=31, PACKAGE=32, PRIVATE=33, PROTECTED=34, PUBLIC=35, RETURN=36,
+ SHORT=37, STATIC=38, STRICTFP=39, SUPER=40, SWITCH=41, SYNCHRONIZED=42,
+ THIS=43, THROW=44, THROWS=45, TRANSIENT=46, TRY=47, VAR=48, VOID=49, VOLATILE=50,
+ WHILE=51, DECIMAL_LITERAL=52, HEX_LITERAL=53, OCT_LITERAL=54, BINARY_LITERAL=55,
+ FLOAT_LITERAL=56, HEX_FLOAT_LITERAL=57, BOOL_LITERAL=58, CHAR_LITERAL=59,
+ STRING_LITERAL=60, NULL_LITERAL=61, LPAREN=62, RPAREN=63, LBRACE=64, RBRACE=65,
+ LBRACK=66, RBRACK=67, SEMI=68, COMMA=69, DOT=70, ASSIGN=71, GT=72, LT=73,
+ BANG=74, TILDE=75, QUESTION=76, COLON=77, EQUAL=78, LE=79, GE=80, NOTEQUAL=81,
+ AND=82, OR=83, INC=84, DEC=85, ADD=86, SUB=87, MUL=88, DIV=89, BITAND=90,
+ BITOR=91, CARET=92, MOD=93, ADD_ASSIGN=94, SUB_ASSIGN=95, MUL_ASSIGN=96,
+ DIV_ASSIGN=97, AND_ASSIGN=98, OR_ASSIGN=99, XOR_ASSIGN=100, MOD_ASSIGN=101,
+ LSHIFT_ASSIGN=102, RSHIFT_ASSIGN=103, URSHIFT_ASSIGN=104, ARROW=105, COLONCOLON=106,
+ AT=107, ELLIPSIS=108, WS=109, BLOCK_COMMENT=110, LINE_COMMENT=111, IDENTIFIER=112;
+ public static String[] channelNames = {
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+ };
+
+ public static String[] modeNames = {
+ "DEFAULT_MODE"
+ };
+
+ private static String[] makeRuleNames() {
+ return new String[] {
+ "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR",
+ "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM",
+ "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS",
+ "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW",
+ "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC",
+ "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS",
+ "TRANSIENT", "TRY", "VAR", "VOID", "VOLATILE", "WHILE", "DECIMAL_LITERAL",
+ "HEX_LITERAL", "OCT_LITERAL", "BINARY_LITERAL", "FLOAT_LITERAL", "HEX_FLOAT_LITERAL",
+ "BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "NULL_LITERAL", "LPAREN",
+ "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT",
+ "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", "EQUAL",
+ "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL",
+ "DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
+ "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
+ "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
+ "COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "LINE_COMMENT",
+ "IDENTIFIER", "ExponentPart", "EscapeSequence", "HexDigits", "HexDigit",
+ "Digits", "LetterOrDigit", "Letter"
+ };
+ }
+ public static final String[] ruleNames = makeRuleNames();
+
+ private static String[] makeLiteralNames() {
+ return new String[] {
+ null, "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'",
+ "'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'",
+ "'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", "'finally'",
+ "'float'", "'for'", "'if'", "'goto'", "'implements'", "'import'", "'instanceof'",
+ "'int'", "'interface'", "'long'", "'native'", "'new'", "'package'", "'private'",
+ "'protected'", "'public'", "'return'", "'short'", "'static'", "'strictfp'",
+ "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", "'throws'",
+ "'transient'", "'try'", "'var'", "'void'", "'volatile'", "'while'", null,
+ null, null, null, null, null, null, null, null, "'null'", "'('", "')'",
+ "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", "'='", "'>'", "'<'",
+ "'!'", "'~'", "'?'", "':'", "'=='", "'<='", "'>='", "'!='", "'&&'", "'||'",
+ "'++'", "'--'", "'+'", "'-'", "'*'", "'/'", "'&'", "'|'", "'^'", "'%'",
+ "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'<<='",
+ "'>>='", "'>>>='", "'->'", "'::'", "'@'", "'...'"
+ };
+ }
+ private static final String[] _LITERAL_NAMES = makeLiteralNames();
+ private static String[] makeSymbolicNames() {
+ return new String[] {
+ null, "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH",
+ "CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE",
+ "ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO",
+ "IMPLEMENTS", "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE",
+ "NEW", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT",
+ "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW",
+ "THROWS", "TRANSIENT", "TRY", "VAR", "VOID", "VOLATILE", "WHILE", "DECIMAL_LITERAL",
+ "HEX_LITERAL", "OCT_LITERAL", "BINARY_LITERAL", "FLOAT_LITERAL", "HEX_FLOAT_LITERAL",
+ "BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "NULL_LITERAL", "LPAREN",
+ "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT",
+ "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", "EQUAL",
+ "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL",
+ "DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
+ "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
+ "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
+ "COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "LINE_COMMENT",
+ "IDENTIFIER"
+ };
+ }
+ private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+ public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+ /**
+ * @deprecated Use {@link #VOCABULARY} instead.
+ */
+ @Deprecated
+ public static final String[] tokenNames;
+ static {
+ tokenNames = new String[_SYMBOLIC_NAMES.length];
+ for (int i = 0; i < tokenNames.length; i++) {
+ tokenNames[i] = VOCABULARY.getLiteralName(i);
+ if (tokenNames[i] == null) {
+ tokenNames[i] = VOCABULARY.getSymbolicName(i);
+ }
+
+ if (tokenNames[i] == null) {
+ tokenNames[i] = "";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+
+ public JavaLexer(CharStream input) {
+ super(input);
+ _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+
+ @Override
+ public String getGrammarFileName() { return "JavaLexer.g4"; }
+
+ @Override
+ public String[] getRuleNames() { return ruleNames; }
+
+ @Override
+ public String getSerializedATN() { return _serializedATN; }
+
+ @Override
+ public String[] getChannelNames() { return channelNames; }
+
+ @Override
+ public String[] getModeNames() { return modeNames; }
+
+ @Override
+ public ATN getATN() { return _ATN; }
+
+ public static final String _serializedATN =
+ "\u0004\u0000p\u03b7\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
+ "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+
+ "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+
+ "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+
+ "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+
+ "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
+ "\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
+ "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
+ "!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
+ "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
+ "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
+ "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
+ "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+
+ ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+
+ "?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+
+ "D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+
+ "I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007"+
+ "N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007"+
+ "S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007"+
+ "X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007"+
+ "]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007"+
+ "b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007"+
+ "g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007"+
+ "l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007"+
+ "q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007"+
+ "v\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+
+ "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+
+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+
+ "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+
+ "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
+ "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+
+ "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+
+ "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+
+ "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
+ "\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+
+ "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+
+ "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
+ "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+
+ "\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+
+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
+ "\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
+ "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
+ "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+
+ "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001"+
+ "\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+
+ "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+
+ "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
+ "\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+
+ "\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
+ "\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
+ "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001"+
+ "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+
+ "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001"+
+ "\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+
+ "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001"+
+ " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001"+
+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
+ "\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+
+ "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001"+
+ "%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+
+ "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001"+
+ "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001"+
+ ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001"+
+ "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+
+ ",\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001"+
+ "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+
+ ".\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u0001"+
+ "1\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+
+ "2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00033\u024a\b3\u0001"+
+ "3\u00043\u024d\b3\u000b3\f3\u024e\u00013\u00033\u0252\b3\u00033\u0254"+
+ "\b3\u00013\u00033\u0257\b3\u00014\u00014\u00014\u00014\u00054\u025d\b"+
+ "4\n4\f4\u0260\t4\u00014\u00034\u0263\b4\u00014\u00034\u0266\b4\u00015"+
+ "\u00015\u00055\u026a\b5\n5\f5\u026d\t5\u00015\u00015\u00055\u0271\b5\n"+
+ "5\f5\u0274\t5\u00015\u00035\u0277\b5\u00015\u00035\u027a\b5\u00016\u0001"+
+ "6\u00016\u00016\u00056\u0280\b6\n6\f6\u0283\t6\u00016\u00036\u0286\b6"+
+ "\u00016\u00036\u0289\b6\u00017\u00017\u00017\u00037\u028e\b7\u00017\u0001"+
+ "7\u00037\u0292\b7\u00017\u00037\u0295\b7\u00017\u00037\u0298\b7\u0001"+
+ "7\u00017\u00017\u00037\u029d\b7\u00017\u00037\u02a0\b7\u00037\u02a2\b"+
+ "7\u00018\u00018\u00018\u00018\u00038\u02a8\b8\u00018\u00038\u02ab\b8\u0001"+
+ "8\u00018\u00038\u02af\b8\u00018\u00018\u00038\u02b3\b8\u00018\u00018\u0003"+
+ "8\u02b7\b8\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u0001"+
+ "9\u00039\u02c2\b9\u0001:\u0001:\u0001:\u0003:\u02c7\b:\u0001:\u0001:\u0001"+
+ ";\u0001;\u0001;\u0005;\u02ce\b;\n;\f;\u02d1\t;\u0001;\u0001;\u0001<\u0001"+
+ "<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001>\u0001>\u0001?\u0001?\u0001"+
+ "@\u0001@\u0001A\u0001A\u0001B\u0001B\u0001C\u0001C\u0001D\u0001D\u0001"+
+ "E\u0001E\u0001F\u0001F\u0001G\u0001G\u0001H\u0001H\u0001I\u0001I\u0001"+
+ "J\u0001J\u0001K\u0001K\u0001L\u0001L\u0001M\u0001M\u0001M\u0001N\u0001"+
+ "N\u0001N\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001"+
+ "Q\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001"+
+ "U\u0001U\u0001V\u0001V\u0001W\u0001W\u0001X\u0001X\u0001Y\u0001Y\u0001"+
+ "Z\u0001Z\u0001[\u0001[\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001^\u0001"+
+ "^\u0001^\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001a\u0001a\u0001"+
+ "a\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001d\u0001d\u0001d\u0001"+
+ "e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001g\u0001g\u0001"+
+ "g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001j\u0001"+
+ "j\u0001k\u0001k\u0001k\u0001k\u0001l\u0004l\u0354\bl\u000bl\fl\u0355\u0001"+
+ "l\u0001l\u0001m\u0001m\u0001m\u0001m\u0005m\u035e\bm\nm\fm\u0361\tm\u0001"+
+ "m\u0001m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001n\u0005n\u036c"+
+ "\bn\nn\fn\u036f\tn\u0001n\u0001n\u0001o\u0001o\u0005o\u0375\bo\no\fo\u0378"+
+ "\to\u0001p\u0001p\u0003p\u037c\bp\u0001p\u0001p\u0001q\u0001q\u0001q\u0001"+
+ "q\u0003q\u0384\bq\u0001q\u0003q\u0387\bq\u0001q\u0001q\u0001q\u0004q\u038c"+
+ "\bq\u000bq\fq\u038d\u0001q\u0001q\u0001q\u0001q\u0001q\u0003q\u0395\b"+
+ "q\u0001r\u0001r\u0001r\u0005r\u039a\br\nr\fr\u039d\tr\u0001r\u0003r\u03a0"+
+ "\br\u0001s\u0001s\u0001t\u0001t\u0005t\u03a6\bt\nt\ft\u03a9\tt\u0001t"+
+ "\u0003t\u03ac\bt\u0001u\u0001u\u0003u\u03b0\bu\u0001v\u0001v\u0001v\u0001"+
+ "v\u0003v\u03b6\bv\u0001\u035f\u0000w\u0001\u0001\u0003\u0002\u0005\u0003"+
+ "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+
+ "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+
+ "%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+
+ "9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6"+
+ "m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085C\u0087D\u0089E\u008bF\u008d"+
+ "G\u008fH\u0091I\u0093J\u0095K\u0097L\u0099M\u009bN\u009dO\u009fP\u00a1"+
+ "Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00adW\u00afX\u00b1Y\u00b3Z\u00b5"+
+ "[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9"+
+ "e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3j\u00d5k\u00d7l\u00d9m\u00dbn\u00dd"+
+ "o\u00dfp\u00e1\u0000\u00e3\u0000\u00e5\u0000\u00e7\u0000\u00e9\u0000\u00eb"+
+ "\u0000\u00ed\u0000\u0001\u0000\u001a\u0001\u000019\u0002\u0000LLll\u0002"+
+ "\u0000XXxx\u0003\u000009AFaf\u0004\u000009AF__af\u0001\u000007\u0002\u0000"+
+ "07__\u0002\u0000BBbb\u0001\u000001\u0002\u000001__\u0004\u0000DDFFddf"+
+ "f\u0002\u0000PPpp\u0002\u0000++--\u0004\u0000\n\n\r\r\'\'\\\\\u0004\u0000"+
+ "\n\n\r\r\"\"\\\\\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r\u0002\u0000"+
+ "EEee\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0001\u000003\u0001\u000009\u0002\u0000"+
+ "09__\u0004\u0000$$AZ__az\u0002\u0000\u0000\u007f\u8000\ud800\u8000\udbff"+
+ "\u0001\u0000\u8000\ud800\u8000\udbff\u0001\u0000\u8000\udc00\u8000\udfff"+
+ "\u03e0\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000"+
+ "\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+
+ "\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+
+ "\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+
+ "\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+
+ "\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+
+ "\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+
+ "\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+
+ "!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+
+ "\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+
+ "\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+
+ "\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+
+ "\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+
+ "\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+
+ "\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+
+ "\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+
+ "\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+
+ "\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+
+ "\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+
+ "\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+
+ "\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+
+ "\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+
+ "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+
+ "\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+
+ "\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000"+
+ "\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000"+
+ "\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y"+
+ "\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000"+
+ "\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000"+
+ "\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000"+
+ "\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000"+
+ "\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000"+
+ "\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000"+
+ "\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000"+
+ "\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000"+
+ "\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000"+
+ "\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000"+
+ "\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000"+
+ "\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000"+
+ "\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000"+
+ "\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000"+
+ "\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000"+
+ "\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000"+
+ "\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000"+
+ "\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000"+
+ "\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000"+
+ "\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000"+
+ "\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000"+
+ "\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000"+
+ "\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001\u0000"+
+ "\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001\u0000"+
+ "\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001\u0000"+
+ "\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000\u0001\u00ef\u0001\u0000"+
+ "\u0000\u0000\u0003\u00f8\u0001\u0000\u0000\u0000\u0005\u00ff\u0001\u0000"+
+ "\u0000\u0000\u0007\u0107\u0001\u0000\u0000\u0000\t\u010d\u0001\u0000\u0000"+
+ "\u0000\u000b\u0112\u0001\u0000\u0000\u0000\r\u0117\u0001\u0000\u0000\u0000"+
+ "\u000f\u011d\u0001\u0000\u0000\u0000\u0011\u0122\u0001\u0000\u0000\u0000"+
+ "\u0013\u0128\u0001\u0000\u0000\u0000\u0015\u012e\u0001\u0000\u0000\u0000"+
+ "\u0017\u0137\u0001\u0000\u0000\u0000\u0019\u013f\u0001\u0000\u0000\u0000"+
+ "\u001b\u0142\u0001\u0000\u0000\u0000\u001d\u0149\u0001\u0000\u0000\u0000"+
+ "\u001f\u014e\u0001\u0000\u0000\u0000!\u0153\u0001\u0000\u0000\u0000#\u015b"+
+ "\u0001\u0000\u0000\u0000%\u0161\u0001\u0000\u0000\u0000\'\u0169\u0001"+
+ "\u0000\u0000\u0000)\u016f\u0001\u0000\u0000\u0000+\u0173\u0001\u0000\u0000"+
+ "\u0000-\u0176\u0001\u0000\u0000\u0000/\u017b\u0001\u0000\u0000\u00001"+
+ "\u0186\u0001\u0000\u0000\u00003\u018d\u0001\u0000\u0000\u00005\u0198\u0001"+
+ "\u0000\u0000\u00007\u019c\u0001\u0000\u0000\u00009\u01a6\u0001\u0000\u0000"+
+ "\u0000;\u01ab\u0001\u0000\u0000\u0000=\u01b2\u0001\u0000\u0000\u0000?"+
+ "\u01b6\u0001\u0000\u0000\u0000A\u01be\u0001\u0000\u0000\u0000C\u01c6\u0001"+
+ "\u0000\u0000\u0000E\u01d0\u0001\u0000\u0000\u0000G\u01d7\u0001\u0000\u0000"+
+ "\u0000I\u01de\u0001\u0000\u0000\u0000K\u01e4\u0001\u0000\u0000\u0000M"+
+ "\u01eb\u0001\u0000\u0000\u0000O\u01f4\u0001\u0000\u0000\u0000Q\u01fa\u0001"+
+ "\u0000\u0000\u0000S\u0201\u0001\u0000\u0000\u0000U\u020e\u0001\u0000\u0000"+
+ "\u0000W\u0213\u0001\u0000\u0000\u0000Y\u0219\u0001\u0000\u0000\u0000["+
+ "\u0220\u0001\u0000\u0000\u0000]\u022a\u0001\u0000\u0000\u0000_\u022e\u0001"+
+ "\u0000\u0000\u0000a\u0232\u0001\u0000\u0000\u0000c\u0237\u0001\u0000\u0000"+
+ "\u0000e\u0240\u0001\u0000\u0000\u0000g\u0253\u0001\u0000\u0000\u0000i"+
+ "\u0258\u0001\u0000\u0000\u0000k\u0267\u0001\u0000\u0000\u0000m\u027b\u0001"+
+ "\u0000\u0000\u0000o\u02a1\u0001\u0000\u0000\u0000q\u02a3\u0001\u0000\u0000"+
+ "\u0000s\u02c1\u0001\u0000\u0000\u0000u\u02c3\u0001\u0000\u0000\u0000w"+
+ "\u02ca\u0001\u0000\u0000\u0000y\u02d4\u0001\u0000\u0000\u0000{\u02d9\u0001"+
+ "\u0000\u0000\u0000}\u02db\u0001\u0000\u0000\u0000\u007f\u02dd\u0001\u0000"+
+ "\u0000\u0000\u0081\u02df\u0001\u0000\u0000\u0000\u0083\u02e1\u0001\u0000"+
+ "\u0000\u0000\u0085\u02e3\u0001\u0000\u0000\u0000\u0087\u02e5\u0001\u0000"+
+ "\u0000\u0000\u0089\u02e7\u0001\u0000\u0000\u0000\u008b\u02e9\u0001\u0000"+
+ "\u0000\u0000\u008d\u02eb\u0001\u0000\u0000\u0000\u008f\u02ed\u0001\u0000"+
+ "\u0000\u0000\u0091\u02ef\u0001\u0000\u0000\u0000\u0093\u02f1\u0001\u0000"+
+ "\u0000\u0000\u0095\u02f3\u0001\u0000\u0000\u0000\u0097\u02f5\u0001\u0000"+
+ "\u0000\u0000\u0099\u02f7\u0001\u0000\u0000\u0000\u009b\u02f9\u0001\u0000"+
+ "\u0000\u0000\u009d\u02fc\u0001\u0000\u0000\u0000\u009f\u02ff\u0001\u0000"+
+ "\u0000\u0000\u00a1\u0302\u0001\u0000\u0000\u0000\u00a3\u0305\u0001\u0000"+
+ "\u0000\u0000\u00a5\u0308\u0001\u0000\u0000\u0000\u00a7\u030b\u0001\u0000"+
+ "\u0000\u0000\u00a9\u030e\u0001\u0000\u0000\u0000\u00ab\u0311\u0001\u0000"+
+ "\u0000\u0000\u00ad\u0313\u0001\u0000\u0000\u0000\u00af\u0315\u0001\u0000"+
+ "\u0000\u0000\u00b1\u0317\u0001\u0000\u0000\u0000\u00b3\u0319\u0001\u0000"+
+ "\u0000\u0000\u00b5\u031b\u0001\u0000\u0000\u0000\u00b7\u031d\u0001\u0000"+
+ "\u0000\u0000\u00b9\u031f\u0001\u0000\u0000\u0000\u00bb\u0321\u0001\u0000"+
+ "\u0000\u0000\u00bd\u0324\u0001\u0000\u0000\u0000\u00bf\u0327\u0001\u0000"+
+ "\u0000\u0000\u00c1\u032a\u0001\u0000\u0000\u0000\u00c3\u032d\u0001\u0000"+
+ "\u0000\u0000\u00c5\u0330\u0001\u0000\u0000\u0000\u00c7\u0333\u0001\u0000"+
+ "\u0000\u0000\u00c9\u0336\u0001\u0000\u0000\u0000\u00cb\u0339\u0001\u0000"+
+ "\u0000\u0000\u00cd\u033d\u0001\u0000\u0000\u0000\u00cf\u0341\u0001\u0000"+
+ "\u0000\u0000\u00d1\u0346\u0001\u0000\u0000\u0000\u00d3\u0349\u0001\u0000"+
+ "\u0000\u0000\u00d5\u034c\u0001\u0000\u0000\u0000\u00d7\u034e\u0001\u0000"+
+ "\u0000\u0000\u00d9\u0353\u0001\u0000\u0000\u0000\u00db\u0359\u0001\u0000"+
+ "\u0000\u0000\u00dd\u0367\u0001\u0000\u0000\u0000\u00df\u0372\u0001\u0000"+
+ "\u0000\u0000\u00e1\u0379\u0001\u0000\u0000\u0000\u00e3\u0394\u0001\u0000"+
+ "\u0000\u0000\u00e5\u0396\u0001\u0000\u0000\u0000\u00e7\u03a1\u0001\u0000"+
+ "\u0000\u0000\u00e9\u03a3\u0001\u0000\u0000\u0000\u00eb\u03af\u0001\u0000"+
+ "\u0000\u0000\u00ed\u03b5\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005a\u0000"+
+ "\u0000\u00f0\u00f1\u0005b\u0000\u0000\u00f1\u00f2\u0005s\u0000\u0000\u00f2"+
+ "\u00f3\u0005t\u0000\u0000\u00f3\u00f4\u0005r\u0000\u0000\u00f4\u00f5\u0005"+
+ "a\u0000\u0000\u00f5\u00f6\u0005c\u0000\u0000\u00f6\u00f7\u0005t\u0000"+
+ "\u0000\u00f7\u0002\u0001\u0000\u0000\u0000\u00f8\u00f9\u0005a\u0000\u0000"+
+ "\u00f9\u00fa\u0005s\u0000\u0000\u00fa\u00fb\u0005s\u0000\u0000\u00fb\u00fc"+
+ "\u0005e\u0000\u0000\u00fc\u00fd\u0005r\u0000\u0000\u00fd\u00fe\u0005t"+
+ "\u0000\u0000\u00fe\u0004\u0001\u0000\u0000\u0000\u00ff\u0100\u0005b\u0000"+
+ "\u0000\u0100\u0101\u0005o\u0000\u0000\u0101\u0102\u0005o\u0000\u0000\u0102"+
+ "\u0103\u0005l\u0000\u0000\u0103\u0104\u0005e\u0000\u0000\u0104\u0105\u0005"+
+ "a\u0000\u0000\u0105\u0106\u0005n\u0000\u0000\u0106\u0006\u0001\u0000\u0000"+
+ "\u0000\u0107\u0108\u0005b\u0000\u0000\u0108\u0109\u0005r\u0000\u0000\u0109"+
+ "\u010a\u0005e\u0000\u0000\u010a\u010b\u0005a\u0000\u0000\u010b\u010c\u0005"+
+ "k\u0000\u0000\u010c\b\u0001\u0000\u0000\u0000\u010d\u010e\u0005b\u0000"+
+ "\u0000\u010e\u010f\u0005y\u0000\u0000\u010f\u0110\u0005t\u0000\u0000\u0110"+
+ "\u0111\u0005e\u0000\u0000\u0111\n\u0001\u0000\u0000\u0000\u0112\u0113"+
+ "\u0005c\u0000\u0000\u0113\u0114\u0005a\u0000\u0000\u0114\u0115\u0005s"+
+ "\u0000\u0000\u0115\u0116\u0005e\u0000\u0000\u0116\f\u0001\u0000\u0000"+
+ "\u0000\u0117\u0118\u0005c\u0000\u0000\u0118\u0119\u0005a\u0000\u0000\u0119"+
+ "\u011a\u0005t\u0000\u0000\u011a\u011b\u0005c\u0000\u0000\u011b\u011c\u0005"+
+ "h\u0000\u0000\u011c\u000e\u0001\u0000\u0000\u0000\u011d\u011e\u0005c\u0000"+
+ "\u0000\u011e\u011f\u0005h\u0000\u0000\u011f\u0120\u0005a\u0000\u0000\u0120"+
+ "\u0121\u0005r\u0000\u0000\u0121\u0010\u0001\u0000\u0000\u0000\u0122\u0123"+
+ "\u0005c\u0000\u0000\u0123\u0124\u0005l\u0000\u0000\u0124\u0125\u0005a"+
+ "\u0000\u0000\u0125\u0126\u0005s\u0000\u0000\u0126\u0127\u0005s\u0000\u0000"+
+ "\u0127\u0012\u0001\u0000\u0000\u0000\u0128\u0129\u0005c\u0000\u0000\u0129"+
+ "\u012a\u0005o\u0000\u0000\u012a\u012b\u0005n\u0000\u0000\u012b\u012c\u0005"+
+ "s\u0000\u0000\u012c\u012d\u0005t\u0000\u0000\u012d\u0014\u0001\u0000\u0000"+
+ "\u0000\u012e\u012f\u0005c\u0000\u0000\u012f\u0130\u0005o\u0000\u0000\u0130"+
+ "\u0131\u0005n\u0000\u0000\u0131\u0132\u0005t\u0000\u0000\u0132\u0133\u0005"+
+ "i\u0000\u0000\u0133\u0134\u0005n\u0000\u0000\u0134\u0135\u0005u\u0000"+
+ "\u0000\u0135\u0136\u0005e\u0000\u0000\u0136\u0016\u0001\u0000\u0000\u0000"+
+ "\u0137\u0138\u0005d\u0000\u0000\u0138\u0139\u0005e\u0000\u0000\u0139\u013a"+
+ "\u0005f\u0000\u0000\u013a\u013b\u0005a\u0000\u0000\u013b\u013c\u0005u"+
+ "\u0000\u0000\u013c\u013d\u0005l\u0000\u0000\u013d\u013e\u0005t\u0000\u0000"+
+ "\u013e\u0018\u0001\u0000\u0000\u0000\u013f\u0140\u0005d\u0000\u0000\u0140"+
+ "\u0141\u0005o\u0000\u0000\u0141\u001a\u0001\u0000\u0000\u0000\u0142\u0143"+
+ "\u0005d\u0000\u0000\u0143\u0144\u0005o\u0000\u0000\u0144\u0145\u0005u"+
+ "\u0000\u0000\u0145\u0146\u0005b\u0000\u0000\u0146\u0147\u0005l\u0000\u0000"+
+ "\u0147\u0148\u0005e\u0000\u0000\u0148\u001c\u0001\u0000\u0000\u0000\u0149"+
+ "\u014a\u0005e\u0000\u0000\u014a\u014b\u0005l\u0000\u0000\u014b\u014c\u0005"+
+ "s\u0000\u0000\u014c\u014d\u0005e\u0000\u0000\u014d\u001e\u0001\u0000\u0000"+
+ "\u0000\u014e\u014f\u0005e\u0000\u0000\u014f\u0150\u0005n\u0000\u0000\u0150"+
+ "\u0151\u0005u\u0000\u0000\u0151\u0152\u0005m\u0000\u0000\u0152 \u0001"+
+ "\u0000\u0000\u0000\u0153\u0154\u0005e\u0000\u0000\u0154\u0155\u0005x\u0000"+
+ "\u0000\u0155\u0156\u0005t\u0000\u0000\u0156\u0157\u0005e\u0000\u0000\u0157"+
+ "\u0158\u0005n\u0000\u0000\u0158\u0159\u0005d\u0000\u0000\u0159\u015a\u0005"+
+ "s\u0000\u0000\u015a\"\u0001\u0000\u0000\u0000\u015b\u015c\u0005f\u0000"+
+ "\u0000\u015c\u015d\u0005i\u0000\u0000\u015d\u015e\u0005n\u0000\u0000\u015e"+
+ "\u015f\u0005a\u0000\u0000\u015f\u0160\u0005l\u0000\u0000\u0160$\u0001"+
+ "\u0000\u0000\u0000\u0161\u0162\u0005f\u0000\u0000\u0162\u0163\u0005i\u0000"+
+ "\u0000\u0163\u0164\u0005n\u0000\u0000\u0164\u0165\u0005a\u0000\u0000\u0165"+
+ "\u0166\u0005l\u0000\u0000\u0166\u0167\u0005l\u0000\u0000\u0167\u0168\u0005"+
+ "y\u0000\u0000\u0168&\u0001\u0000\u0000\u0000\u0169\u016a\u0005f\u0000"+
+ "\u0000\u016a\u016b\u0005l\u0000\u0000\u016b\u016c\u0005o\u0000\u0000\u016c"+
+ "\u016d\u0005a\u0000\u0000\u016d\u016e\u0005t\u0000\u0000\u016e(\u0001"+
+ "\u0000\u0000\u0000\u016f\u0170\u0005f\u0000\u0000\u0170\u0171\u0005o\u0000"+
+ "\u0000\u0171\u0172\u0005r\u0000\u0000\u0172*\u0001\u0000\u0000\u0000\u0173"+
+ "\u0174\u0005i\u0000\u0000\u0174\u0175\u0005f\u0000\u0000\u0175,\u0001"+
+ "\u0000\u0000\u0000\u0176\u0177\u0005g\u0000\u0000\u0177\u0178\u0005o\u0000"+
+ "\u0000\u0178\u0179\u0005t\u0000\u0000\u0179\u017a\u0005o\u0000\u0000\u017a"+
+ ".\u0001\u0000\u0000\u0000\u017b\u017c\u0005i\u0000\u0000\u017c\u017d\u0005"+
+ "m\u0000\u0000\u017d\u017e\u0005p\u0000\u0000\u017e\u017f\u0005l\u0000"+
+ "\u0000\u017f\u0180\u0005e\u0000\u0000\u0180\u0181\u0005m\u0000\u0000\u0181"+
+ "\u0182\u0005e\u0000\u0000\u0182\u0183\u0005n\u0000\u0000\u0183\u0184\u0005"+
+ "t\u0000\u0000\u0184\u0185\u0005s\u0000\u0000\u01850\u0001\u0000\u0000"+
+ "\u0000\u0186\u0187\u0005i\u0000\u0000\u0187\u0188\u0005m\u0000\u0000\u0188"+
+ "\u0189\u0005p\u0000\u0000\u0189\u018a\u0005o\u0000\u0000\u018a\u018b\u0005"+
+ "r\u0000\u0000\u018b\u018c\u0005t\u0000\u0000\u018c2\u0001\u0000\u0000"+
+ "\u0000\u018d\u018e\u0005i\u0000\u0000\u018e\u018f\u0005n\u0000\u0000\u018f"+
+ "\u0190\u0005s\u0000\u0000\u0190\u0191\u0005t\u0000\u0000\u0191\u0192\u0005"+
+ "a\u0000\u0000\u0192\u0193\u0005n\u0000\u0000\u0193\u0194\u0005c\u0000"+
+ "\u0000\u0194\u0195\u0005e\u0000\u0000\u0195\u0196\u0005o\u0000\u0000\u0196"+
+ "\u0197\u0005f\u0000\u0000\u01974\u0001\u0000\u0000\u0000\u0198\u0199\u0005"+
+ "i\u0000\u0000\u0199\u019a\u0005n\u0000\u0000\u019a\u019b\u0005t\u0000"+
+ "\u0000\u019b6\u0001\u0000\u0000\u0000\u019c\u019d\u0005i\u0000\u0000\u019d"+
+ "\u019e\u0005n\u0000\u0000\u019e\u019f\u0005t\u0000\u0000\u019f\u01a0\u0005"+
+ "e\u0000\u0000\u01a0\u01a1\u0005r\u0000\u0000\u01a1\u01a2\u0005f\u0000"+
+ "\u0000\u01a2\u01a3\u0005a\u0000\u0000\u01a3\u01a4\u0005c\u0000\u0000\u01a4"+
+ "\u01a5\u0005e\u0000\u0000\u01a58\u0001\u0000\u0000\u0000\u01a6\u01a7\u0005"+
+ "l\u0000\u0000\u01a7\u01a8\u0005o\u0000\u0000\u01a8\u01a9\u0005n\u0000"+
+ "\u0000\u01a9\u01aa\u0005g\u0000\u0000\u01aa:\u0001\u0000\u0000\u0000\u01ab"+
+ "\u01ac\u0005n\u0000\u0000\u01ac\u01ad\u0005a\u0000\u0000\u01ad\u01ae\u0005"+
+ "t\u0000\u0000\u01ae\u01af\u0005i\u0000\u0000\u01af\u01b0\u0005v\u0000"+
+ "\u0000\u01b0\u01b1\u0005e\u0000\u0000\u01b1<\u0001\u0000\u0000\u0000\u01b2"+
+ "\u01b3\u0005n\u0000\u0000\u01b3\u01b4\u0005e\u0000\u0000\u01b4\u01b5\u0005"+
+ "w\u0000\u0000\u01b5>\u0001\u0000\u0000\u0000\u01b6\u01b7\u0005p\u0000"+
+ "\u0000\u01b7\u01b8\u0005a\u0000\u0000\u01b8\u01b9\u0005c\u0000\u0000\u01b9"+
+ "\u01ba\u0005k\u0000\u0000\u01ba\u01bb\u0005a\u0000\u0000\u01bb\u01bc\u0005"+
+ "g\u0000\u0000\u01bc\u01bd\u0005e\u0000\u0000\u01bd@\u0001\u0000\u0000"+
+ "\u0000\u01be\u01bf\u0005p\u0000\u0000\u01bf\u01c0\u0005r\u0000\u0000\u01c0"+
+ "\u01c1\u0005i\u0000\u0000\u01c1\u01c2\u0005v\u0000\u0000\u01c2\u01c3\u0005"+
+ "a\u0000\u0000\u01c3\u01c4\u0005t\u0000\u0000\u01c4\u01c5\u0005e\u0000"+
+ "\u0000\u01c5B\u0001\u0000\u0000\u0000\u01c6\u01c7\u0005p\u0000\u0000\u01c7"+
+ "\u01c8\u0005r\u0000\u0000\u01c8\u01c9\u0005o\u0000\u0000\u01c9\u01ca\u0005"+
+ "t\u0000\u0000\u01ca\u01cb\u0005e\u0000\u0000\u01cb\u01cc\u0005c\u0000"+
+ "\u0000\u01cc\u01cd\u0005t\u0000\u0000\u01cd\u01ce\u0005e\u0000\u0000\u01ce"+
+ "\u01cf\u0005d\u0000\u0000\u01cfD\u0001\u0000\u0000\u0000\u01d0\u01d1\u0005"+
+ "p\u0000\u0000\u01d1\u01d2\u0005u\u0000\u0000\u01d2\u01d3\u0005b\u0000"+
+ "\u0000\u01d3\u01d4\u0005l\u0000\u0000\u01d4\u01d5\u0005i\u0000\u0000\u01d5"+
+ "\u01d6\u0005c\u0000\u0000\u01d6F\u0001\u0000\u0000\u0000\u01d7\u01d8\u0005"+
+ "r\u0000\u0000\u01d8\u01d9\u0005e\u0000\u0000\u01d9\u01da\u0005t\u0000"+
+ "\u0000\u01da\u01db\u0005u\u0000\u0000\u01db\u01dc\u0005r\u0000\u0000\u01dc"+
+ "\u01dd\u0005n\u0000\u0000\u01ddH\u0001\u0000\u0000\u0000\u01de\u01df\u0005"+
+ "s\u0000\u0000\u01df\u01e0\u0005h\u0000\u0000\u01e0\u01e1\u0005o\u0000"+
+ "\u0000\u01e1\u01e2\u0005r\u0000\u0000\u01e2\u01e3\u0005t\u0000\u0000\u01e3"+
+ "J\u0001\u0000\u0000\u0000\u01e4\u01e5\u0005s\u0000\u0000\u01e5\u01e6\u0005"+
+ "t\u0000\u0000\u01e6\u01e7\u0005a\u0000\u0000\u01e7\u01e8\u0005t\u0000"+
+ "\u0000\u01e8\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005c\u0000\u0000\u01ea"+
+ "L\u0001\u0000\u0000\u0000\u01eb\u01ec\u0005s\u0000\u0000\u01ec\u01ed\u0005"+
+ "t\u0000\u0000\u01ed\u01ee\u0005r\u0000\u0000\u01ee\u01ef\u0005i\u0000"+
+ "\u0000\u01ef\u01f0\u0005c\u0000\u0000\u01f0\u01f1\u0005t\u0000\u0000\u01f1"+
+ "\u01f2\u0005f\u0000\u0000\u01f2\u01f3\u0005p\u0000\u0000\u01f3N\u0001"+
+ "\u0000\u0000\u0000\u01f4\u01f5\u0005s\u0000\u0000\u01f5\u01f6\u0005u\u0000"+
+ "\u0000\u01f6\u01f7\u0005p\u0000\u0000\u01f7\u01f8\u0005e\u0000\u0000\u01f8"+
+ "\u01f9\u0005r\u0000\u0000\u01f9P\u0001\u0000\u0000\u0000\u01fa\u01fb\u0005"+
+ "s\u0000\u0000\u01fb\u01fc\u0005w\u0000\u0000\u01fc\u01fd\u0005i\u0000"+
+ "\u0000\u01fd\u01fe\u0005t\u0000\u0000\u01fe\u01ff\u0005c\u0000\u0000\u01ff"+
+ "\u0200\u0005h\u0000\u0000\u0200R\u0001\u0000\u0000\u0000\u0201\u0202\u0005"+
+ "s\u0000\u0000\u0202\u0203\u0005y\u0000\u0000\u0203\u0204\u0005n\u0000"+
+ "\u0000\u0204\u0205\u0005c\u0000\u0000\u0205\u0206\u0005h\u0000\u0000\u0206"+
+ "\u0207\u0005r\u0000\u0000\u0207\u0208\u0005o\u0000\u0000\u0208\u0209\u0005"+
+ "n\u0000\u0000\u0209\u020a\u0005i\u0000\u0000\u020a\u020b\u0005z\u0000"+
+ "\u0000\u020b\u020c\u0005e\u0000\u0000\u020c\u020d\u0005d\u0000\u0000\u020d"+
+ "T\u0001\u0000\u0000\u0000\u020e\u020f\u0005t\u0000\u0000\u020f\u0210\u0005"+
+ "h\u0000\u0000\u0210\u0211\u0005i\u0000\u0000\u0211\u0212\u0005s\u0000"+
+ "\u0000\u0212V\u0001\u0000\u0000\u0000\u0213\u0214\u0005t\u0000\u0000\u0214"+
+ "\u0215\u0005h\u0000\u0000\u0215\u0216\u0005r\u0000\u0000\u0216\u0217\u0005"+
+ "o\u0000\u0000\u0217\u0218\u0005w\u0000\u0000\u0218X\u0001\u0000\u0000"+
+ "\u0000\u0219\u021a\u0005t\u0000\u0000\u021a\u021b\u0005h\u0000\u0000\u021b"+
+ "\u021c\u0005r\u0000\u0000\u021c\u021d\u0005o\u0000\u0000\u021d\u021e\u0005"+
+ "w\u0000\u0000\u021e\u021f\u0005s\u0000\u0000\u021fZ\u0001\u0000\u0000"+
+ "\u0000\u0220\u0221\u0005t\u0000\u0000\u0221\u0222\u0005r\u0000\u0000\u0222"+
+ "\u0223\u0005a\u0000\u0000\u0223\u0224\u0005n\u0000\u0000\u0224\u0225\u0005"+
+ "s\u0000\u0000\u0225\u0226\u0005i\u0000\u0000\u0226\u0227\u0005e\u0000"+
+ "\u0000\u0227\u0228\u0005n\u0000\u0000\u0228\u0229\u0005t\u0000\u0000\u0229"+
+ "\\\u0001\u0000\u0000\u0000\u022a\u022b\u0005t\u0000\u0000\u022b\u022c"+
+ "\u0005r\u0000\u0000\u022c\u022d\u0005y\u0000\u0000\u022d^\u0001\u0000"+
+ "\u0000\u0000\u022e\u022f\u0005v\u0000\u0000\u022f\u0230\u0005a\u0000\u0000"+
+ "\u0230\u0231\u0005r\u0000\u0000\u0231`\u0001\u0000\u0000\u0000\u0232\u0233"+
+ "\u0005v\u0000\u0000\u0233\u0234\u0005o\u0000\u0000\u0234\u0235\u0005i"+
+ "\u0000\u0000\u0235\u0236\u0005d\u0000\u0000\u0236b\u0001\u0000\u0000\u0000"+
+ "\u0237\u0238\u0005v\u0000\u0000\u0238\u0239\u0005o\u0000\u0000\u0239\u023a"+
+ "\u0005l\u0000\u0000\u023a\u023b\u0005a\u0000\u0000\u023b\u023c\u0005t"+
+ "\u0000\u0000\u023c\u023d\u0005i\u0000\u0000\u023d\u023e\u0005l\u0000\u0000"+
+ "\u023e\u023f\u0005e\u0000\u0000\u023fd\u0001\u0000\u0000\u0000\u0240\u0241"+
+ "\u0005w\u0000\u0000\u0241\u0242\u0005h\u0000\u0000\u0242\u0243\u0005i"+
+ "\u0000\u0000\u0243\u0244\u0005l\u0000\u0000\u0244\u0245\u0005e\u0000\u0000"+
+ "\u0245f\u0001\u0000\u0000\u0000\u0246\u0254\u00050\u0000\u0000\u0247\u0251"+
+ "\u0007\u0000\u0000\u0000\u0248\u024a\u0003\u00e9t\u0000\u0249\u0248\u0001"+
+ "\u0000\u0000\u0000\u0249\u024a\u0001\u0000\u0000\u0000\u024a\u0252\u0001"+
+ "\u0000\u0000\u0000\u024b\u024d\u0005_\u0000\u0000\u024c\u024b\u0001\u0000"+
+ "\u0000\u0000\u024d\u024e\u0001\u0000\u0000\u0000\u024e\u024c\u0001\u0000"+
+ "\u0000\u0000\u024e\u024f\u0001\u0000\u0000\u0000\u024f\u0250\u0001\u0000"+
+ "\u0000\u0000\u0250\u0252\u0003\u00e9t\u0000\u0251\u0249\u0001\u0000\u0000"+
+ "\u0000\u0251\u024c\u0001\u0000\u0000\u0000\u0252\u0254\u0001\u0000\u0000"+
+ "\u0000\u0253\u0246\u0001\u0000\u0000\u0000\u0253\u0247\u0001\u0000\u0000"+
+ "\u0000\u0254\u0256\u0001\u0000\u0000\u0000\u0255\u0257\u0007\u0001\u0000"+
+ "\u0000\u0256\u0255\u0001\u0000\u0000\u0000\u0256\u0257\u0001\u0000\u0000"+
+ "\u0000\u0257h\u0001\u0000\u0000\u0000\u0258\u0259\u00050\u0000\u0000\u0259"+
+ "\u025a\u0007\u0002\u0000\u0000\u025a\u0262\u0007\u0003\u0000\u0000\u025b"+
+ "\u025d\u0007\u0004\u0000\u0000\u025c\u025b\u0001\u0000\u0000\u0000\u025d"+
+ "\u0260\u0001\u0000\u0000\u0000\u025e\u025c\u0001\u0000\u0000\u0000\u025e"+
+ "\u025f\u0001\u0000\u0000\u0000\u025f\u0261\u0001\u0000\u0000\u0000\u0260"+
+ "\u025e\u0001\u0000\u0000\u0000\u0261\u0263\u0007\u0003\u0000\u0000\u0262"+
+ "\u025e\u0001\u0000\u0000\u0000\u0262\u0263\u0001\u0000\u0000\u0000\u0263"+
+ "\u0265\u0001\u0000\u0000\u0000\u0264\u0266\u0007\u0001\u0000\u0000\u0265"+
+ "\u0264\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000\u0266"+
+ "j\u0001\u0000\u0000\u0000\u0267\u026b\u00050\u0000\u0000\u0268\u026a\u0005"+
+ "_\u0000\u0000\u0269\u0268\u0001\u0000\u0000\u0000\u026a\u026d\u0001\u0000"+
+ "\u0000\u0000\u026b\u0269\u0001\u0000\u0000\u0000\u026b\u026c\u0001\u0000"+
+ "\u0000\u0000\u026c\u026e\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000"+
+ "\u0000\u0000\u026e\u0276\u0007\u0005\u0000\u0000\u026f\u0271\u0007\u0006"+
+ "\u0000\u0000\u0270\u026f\u0001\u0000\u0000\u0000\u0271\u0274\u0001\u0000"+
+ "\u0000\u0000\u0272\u0270\u0001\u0000\u0000\u0000\u0272\u0273\u0001\u0000"+
+ "\u0000\u0000\u0273\u0275\u0001\u0000\u0000\u0000\u0274\u0272\u0001\u0000"+
+ "\u0000\u0000\u0275\u0277\u0007\u0005\u0000\u0000\u0276\u0272\u0001\u0000"+
+ "\u0000\u0000\u0276\u0277\u0001\u0000\u0000\u0000\u0277\u0279\u0001\u0000"+
+ "\u0000\u0000\u0278\u027a\u0007\u0001\u0000\u0000\u0279\u0278\u0001\u0000"+
+ "\u0000\u0000\u0279\u027a\u0001\u0000\u0000\u0000\u027al\u0001\u0000\u0000"+
+ "\u0000\u027b\u027c\u00050\u0000\u0000\u027c\u027d\u0007\u0007\u0000\u0000"+
+ "\u027d\u0285\u0007\b\u0000\u0000\u027e\u0280\u0007\t\u0000\u0000\u027f"+
+ "\u027e\u0001\u0000\u0000\u0000\u0280\u0283\u0001\u0000\u0000\u0000\u0281"+
+ "\u027f\u0001\u0000\u0000\u0000\u0281\u0282\u0001\u0000\u0000\u0000\u0282"+
+ "\u0284\u0001\u0000\u0000\u0000\u0283\u0281\u0001\u0000\u0000\u0000\u0284"+
+ "\u0286\u0007\b\u0000\u0000\u0285\u0281\u0001\u0000\u0000\u0000\u0285\u0286"+
+ "\u0001\u0000\u0000\u0000\u0286\u0288\u0001\u0000\u0000\u0000\u0287\u0289"+
+ "\u0007\u0001\u0000\u0000\u0288\u0287\u0001\u0000\u0000\u0000\u0288\u0289"+
+ "\u0001\u0000\u0000\u0000\u0289n\u0001\u0000\u0000\u0000\u028a\u028b\u0003"+
+ "\u00e9t\u0000\u028b\u028d\u0005.\u0000\u0000\u028c\u028e\u0003\u00e9t"+
+ "\u0000\u028d\u028c\u0001\u0000\u0000\u0000\u028d\u028e\u0001\u0000\u0000"+
+ "\u0000\u028e\u0292\u0001\u0000\u0000\u0000\u028f\u0290\u0005.\u0000\u0000"+
+ "\u0290\u0292\u0003\u00e9t\u0000\u0291\u028a\u0001\u0000\u0000\u0000\u0291"+
+ "\u028f\u0001\u0000\u0000\u0000\u0292\u0294\u0001\u0000\u0000\u0000\u0293"+
+ "\u0295\u0003\u00e1p\u0000\u0294\u0293\u0001\u0000\u0000\u0000\u0294\u0295"+
+ "\u0001\u0000\u0000\u0000\u0295\u0297\u0001\u0000\u0000\u0000\u0296\u0298"+
+ "\u0007\n\u0000\u0000\u0297\u0296\u0001\u0000\u0000\u0000\u0297\u0298\u0001"+
+ "\u0000\u0000\u0000\u0298\u02a2\u0001\u0000\u0000\u0000\u0299\u029f\u0003"+
+ "\u00e9t\u0000\u029a\u029c\u0003\u00e1p\u0000\u029b\u029d\u0007\n\u0000"+
+ "\u0000\u029c\u029b\u0001\u0000\u0000\u0000\u029c\u029d\u0001\u0000\u0000"+
+ "\u0000\u029d\u02a0\u0001\u0000\u0000\u0000\u029e\u02a0\u0007\n\u0000\u0000"+
+ "\u029f\u029a\u0001\u0000\u0000\u0000\u029f\u029e\u0001\u0000\u0000\u0000"+
+ "\u02a0\u02a2\u0001\u0000\u0000\u0000\u02a1\u0291\u0001\u0000\u0000\u0000"+
+ "\u02a1\u0299\u0001\u0000\u0000\u0000\u02a2p\u0001\u0000\u0000\u0000\u02a3"+
+ "\u02a4\u00050\u0000\u0000\u02a4\u02ae\u0007\u0002\u0000\u0000\u02a5\u02a7"+
+ "\u0003\u00e5r\u0000\u02a6\u02a8\u0005.\u0000\u0000\u02a7\u02a6\u0001\u0000"+
+ "\u0000\u0000\u02a7\u02a8\u0001\u0000\u0000\u0000\u02a8\u02af\u0001\u0000"+
+ "\u0000\u0000\u02a9\u02ab\u0003\u00e5r\u0000\u02aa\u02a9\u0001\u0000\u0000"+
+ "\u0000\u02aa\u02ab\u0001\u0000\u0000\u0000\u02ab\u02ac\u0001\u0000\u0000"+
+ "\u0000\u02ac\u02ad\u0005.\u0000\u0000\u02ad\u02af\u0003\u00e5r\u0000\u02ae"+
+ "\u02a5\u0001\u0000\u0000\u0000\u02ae\u02aa\u0001\u0000\u0000\u0000\u02af"+
+ "\u02b0\u0001\u0000\u0000\u0000\u02b0\u02b2\u0007\u000b\u0000\u0000\u02b1"+
+ "\u02b3\u0007\f\u0000\u0000\u02b2\u02b1\u0001\u0000\u0000\u0000\u02b2\u02b3"+
+ "\u0001\u0000\u0000\u0000\u02b3\u02b4\u0001\u0000\u0000\u0000\u02b4\u02b6"+
+ "\u0003\u00e9t\u0000\u02b5\u02b7\u0007\n\u0000\u0000\u02b6\u02b5\u0001"+
+ "\u0000\u0000\u0000\u02b6\u02b7\u0001\u0000\u0000\u0000\u02b7r\u0001\u0000"+
+ "\u0000\u0000\u02b8\u02b9\u0005t\u0000\u0000\u02b9\u02ba\u0005r\u0000\u0000"+
+ "\u02ba\u02bb\u0005u\u0000\u0000\u02bb\u02c2\u0005e\u0000\u0000\u02bc\u02bd"+
+ "\u0005f\u0000\u0000\u02bd\u02be\u0005a\u0000\u0000\u02be\u02bf\u0005l"+
+ "\u0000\u0000\u02bf\u02c0\u0005s\u0000\u0000\u02c0\u02c2\u0005e\u0000\u0000"+
+ "\u02c1\u02b8\u0001\u0000\u0000\u0000\u02c1\u02bc\u0001\u0000\u0000\u0000"+
+ "\u02c2t\u0001\u0000\u0000\u0000\u02c3\u02c6\u0005\'\u0000\u0000\u02c4"+
+ "\u02c7\b\r\u0000\u0000\u02c5\u02c7\u0003\u00e3q\u0000\u02c6\u02c4\u0001"+
+ "\u0000\u0000\u0000\u02c6\u02c5\u0001\u0000\u0000\u0000\u02c7\u02c8\u0001"+
+ "\u0000\u0000\u0000\u02c8\u02c9\u0005\'\u0000\u0000\u02c9v\u0001\u0000"+
+ "\u0000\u0000\u02ca\u02cf\u0005\"\u0000\u0000\u02cb\u02ce\b\u000e\u0000"+
+ "\u0000\u02cc\u02ce\u0003\u00e3q\u0000\u02cd\u02cb\u0001\u0000\u0000\u0000"+
+ "\u02cd\u02cc\u0001\u0000\u0000\u0000\u02ce\u02d1\u0001\u0000\u0000\u0000"+
+ "\u02cf\u02cd\u0001\u0000\u0000\u0000\u02cf\u02d0\u0001\u0000\u0000\u0000"+
+ "\u02d0\u02d2\u0001\u0000\u0000\u0000\u02d1\u02cf\u0001\u0000\u0000\u0000"+
+ "\u02d2\u02d3\u0005\"\u0000\u0000\u02d3x\u0001\u0000\u0000\u0000\u02d4"+
+ "\u02d5\u0005n\u0000\u0000\u02d5\u02d6\u0005u\u0000\u0000\u02d6\u02d7\u0005"+
+ "l\u0000\u0000\u02d7\u02d8\u0005l\u0000\u0000\u02d8z\u0001\u0000\u0000"+
+ "\u0000\u02d9\u02da\u0005(\u0000\u0000\u02da|\u0001\u0000\u0000\u0000\u02db"+
+ "\u02dc\u0005)\u0000\u0000\u02dc~\u0001\u0000\u0000\u0000\u02dd\u02de\u0005"+
+ "{\u0000\u0000\u02de\u0080\u0001\u0000\u0000\u0000\u02df\u02e0\u0005}\u0000"+
+ "\u0000\u02e0\u0082\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005[\u0000\u0000"+
+ "\u02e2\u0084\u0001\u0000\u0000\u0000\u02e3\u02e4\u0005]\u0000\u0000\u02e4"+
+ "\u0086\u0001\u0000\u0000\u0000\u02e5\u02e6\u0005;\u0000\u0000\u02e6\u0088"+
+ "\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005,\u0000\u0000\u02e8\u008a\u0001"+
+ "\u0000\u0000\u0000\u02e9\u02ea\u0005.\u0000\u0000\u02ea\u008c\u0001\u0000"+
+ "\u0000\u0000\u02eb\u02ec\u0005=\u0000\u0000\u02ec\u008e\u0001\u0000\u0000"+
+ "\u0000\u02ed\u02ee\u0005>\u0000\u0000\u02ee\u0090\u0001\u0000\u0000\u0000"+
+ "\u02ef\u02f0\u0005<\u0000\u0000\u02f0\u0092\u0001\u0000\u0000\u0000\u02f1"+
+ "\u02f2\u0005!\u0000\u0000\u02f2\u0094\u0001\u0000\u0000\u0000\u02f3\u02f4"+
+ "\u0005~\u0000\u0000\u02f4\u0096\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005"+
+ "?\u0000\u0000\u02f6\u0098\u0001\u0000\u0000\u0000\u02f7\u02f8\u0005:\u0000"+
+ "\u0000\u02f8\u009a\u0001\u0000\u0000\u0000\u02f9\u02fa\u0005=\u0000\u0000"+
+ "\u02fa\u02fb\u0005=\u0000\u0000\u02fb\u009c\u0001\u0000\u0000\u0000\u02fc"+
+ "\u02fd\u0005<\u0000\u0000\u02fd\u02fe\u0005=\u0000\u0000\u02fe\u009e\u0001"+
+ "\u0000\u0000\u0000\u02ff\u0300\u0005>\u0000\u0000\u0300\u0301\u0005=\u0000"+
+ "\u0000\u0301\u00a0\u0001\u0000\u0000\u0000\u0302\u0303\u0005!\u0000\u0000"+
+ "\u0303\u0304\u0005=\u0000\u0000\u0304\u00a2\u0001\u0000\u0000\u0000\u0305"+
+ "\u0306\u0005&\u0000\u0000\u0306\u0307\u0005&\u0000\u0000\u0307\u00a4\u0001"+
+ "\u0000\u0000\u0000\u0308\u0309\u0005|\u0000\u0000\u0309\u030a\u0005|\u0000"+
+ "\u0000\u030a\u00a6\u0001\u0000\u0000\u0000\u030b\u030c\u0005+\u0000\u0000"+
+ "\u030c\u030d\u0005+\u0000\u0000\u030d\u00a8\u0001\u0000\u0000\u0000\u030e"+
+ "\u030f\u0005-\u0000\u0000\u030f\u0310\u0005-\u0000\u0000\u0310\u00aa\u0001"+
+ "\u0000\u0000\u0000\u0311\u0312\u0005+\u0000\u0000\u0312\u00ac\u0001\u0000"+
+ "\u0000\u0000\u0313\u0314\u0005-\u0000\u0000\u0314\u00ae\u0001\u0000\u0000"+
+ "\u0000\u0315\u0316\u0005*\u0000\u0000\u0316\u00b0\u0001\u0000\u0000\u0000"+
+ "\u0317\u0318\u0005/\u0000\u0000\u0318\u00b2\u0001\u0000\u0000\u0000\u0319"+
+ "\u031a\u0005&\u0000\u0000\u031a\u00b4\u0001\u0000\u0000\u0000\u031b\u031c"+
+ "\u0005|\u0000\u0000\u031c\u00b6\u0001\u0000\u0000\u0000\u031d\u031e\u0005"+
+ "^\u0000\u0000\u031e\u00b8\u0001\u0000\u0000\u0000\u031f\u0320\u0005%\u0000"+
+ "\u0000\u0320\u00ba\u0001\u0000\u0000\u0000\u0321\u0322\u0005+\u0000\u0000"+
+ "\u0322\u0323\u0005=\u0000\u0000\u0323\u00bc\u0001\u0000\u0000\u0000\u0324"+
+ "\u0325\u0005-\u0000\u0000\u0325\u0326\u0005=\u0000\u0000\u0326\u00be\u0001"+
+ "\u0000\u0000\u0000\u0327\u0328\u0005*\u0000\u0000\u0328\u0329\u0005=\u0000"+
+ "\u0000\u0329\u00c0\u0001\u0000\u0000\u0000\u032a\u032b\u0005/\u0000\u0000"+
+ "\u032b\u032c\u0005=\u0000\u0000\u032c\u00c2\u0001\u0000\u0000\u0000\u032d"+
+ "\u032e\u0005&\u0000\u0000\u032e\u032f\u0005=\u0000\u0000\u032f\u00c4\u0001"+
+ "\u0000\u0000\u0000\u0330\u0331\u0005|\u0000\u0000\u0331\u0332\u0005=\u0000"+
+ "\u0000\u0332\u00c6\u0001\u0000\u0000\u0000\u0333\u0334\u0005^\u0000\u0000"+
+ "\u0334\u0335\u0005=\u0000\u0000\u0335\u00c8\u0001\u0000\u0000\u0000\u0336"+
+ "\u0337\u0005%\u0000\u0000\u0337\u0338\u0005=\u0000\u0000\u0338\u00ca\u0001"+
+ "\u0000\u0000\u0000\u0339\u033a\u0005<\u0000\u0000\u033a\u033b\u0005<\u0000"+
+ "\u0000\u033b\u033c\u0005=\u0000\u0000\u033c\u00cc\u0001\u0000\u0000\u0000"+
+ "\u033d\u033e\u0005>\u0000\u0000\u033e\u033f\u0005>\u0000\u0000\u033f\u0340"+
+ "\u0005=\u0000\u0000\u0340\u00ce\u0001\u0000\u0000\u0000\u0341\u0342\u0005"+
+ ">\u0000\u0000\u0342\u0343\u0005>\u0000\u0000\u0343\u0344\u0005>\u0000"+
+ "\u0000\u0344\u0345\u0005=\u0000\u0000\u0345\u00d0\u0001\u0000\u0000\u0000"+
+ "\u0346\u0347\u0005-\u0000\u0000\u0347\u0348\u0005>\u0000\u0000\u0348\u00d2"+
+ "\u0001\u0000\u0000\u0000\u0349\u034a\u0005:\u0000\u0000\u034a\u034b\u0005"+
+ ":\u0000\u0000\u034b\u00d4\u0001\u0000\u0000\u0000\u034c\u034d\u0005@\u0000"+
+ "\u0000\u034d\u00d6\u0001\u0000\u0000\u0000\u034e\u034f\u0005.\u0000\u0000"+
+ "\u034f\u0350\u0005.\u0000\u0000\u0350\u0351\u0005.\u0000\u0000\u0351\u00d8"+
+ "\u0001\u0000\u0000\u0000\u0352\u0354\u0007\u000f\u0000\u0000\u0353\u0352"+
+ "\u0001\u0000\u0000\u0000\u0354\u0355\u0001\u0000\u0000\u0000\u0355\u0353"+
+ "\u0001\u0000\u0000\u0000\u0355\u0356\u0001\u0000\u0000\u0000\u0356\u0357"+
+ "\u0001\u0000\u0000\u0000\u0357\u0358\u0006l\u0000\u0000\u0358\u00da\u0001"+
+ "\u0000\u0000\u0000\u0359\u035a\u0005/\u0000\u0000\u035a\u035b\u0005*\u0000"+
+ "\u0000\u035b\u035f\u0001\u0000\u0000\u0000\u035c\u035e\t\u0000\u0000\u0000"+
+ "\u035d\u035c\u0001\u0000\u0000\u0000\u035e\u0361\u0001\u0000\u0000\u0000"+
+ "\u035f\u0360\u0001\u0000\u0000\u0000\u035f\u035d\u0001\u0000\u0000\u0000"+
+ "\u0360\u0362\u0001\u0000\u0000\u0000\u0361\u035f\u0001\u0000\u0000\u0000"+
+ "\u0362\u0363\u0005*\u0000\u0000\u0363\u0364\u0005/\u0000\u0000\u0364\u0365"+
+ "\u0001\u0000\u0000\u0000\u0365\u0366\u0006m\u0000\u0000\u0366\u00dc\u0001"+
+ "\u0000\u0000\u0000\u0367\u0368\u0005/\u0000\u0000\u0368\u0369\u0005/\u0000"+
+ "\u0000\u0369\u036d\u0001\u0000\u0000\u0000\u036a\u036c\b\u0010\u0000\u0000"+
+ "\u036b\u036a\u0001\u0000\u0000\u0000\u036c\u036f\u0001\u0000\u0000\u0000"+
+ "\u036d\u036b\u0001\u0000\u0000\u0000\u036d\u036e\u0001\u0000\u0000\u0000"+
+ "\u036e\u0370\u0001\u0000\u0000\u0000\u036f\u036d\u0001\u0000\u0000\u0000"+
+ "\u0370\u0371\u0006n\u0000\u0000\u0371\u00de\u0001\u0000\u0000\u0000\u0372"+
+ "\u0376\u0003\u00edv\u0000\u0373\u0375\u0003\u00ebu\u0000\u0374\u0373\u0001"+
+ "\u0000\u0000\u0000\u0375\u0378\u0001\u0000\u0000\u0000\u0376\u0374\u0001"+
+ "\u0000\u0000\u0000\u0376\u0377\u0001\u0000\u0000\u0000\u0377\u00e0\u0001"+
+ "\u0000\u0000\u0000\u0378\u0376\u0001\u0000\u0000\u0000\u0379\u037b\u0007"+
+ "\u0011\u0000\u0000\u037a\u037c\u0007\f\u0000\u0000\u037b\u037a\u0001\u0000"+
+ "\u0000\u0000\u037b\u037c\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000"+
+ "\u0000\u0000\u037d\u037e\u0003\u00e9t\u0000\u037e\u00e2\u0001\u0000\u0000"+
+ "\u0000\u037f\u0380\u0005\\\u0000\u0000\u0380\u0395\u0007\u0012\u0000\u0000"+
+ "\u0381\u0386\u0005\\\u0000\u0000\u0382\u0384\u0007\u0013\u0000\u0000\u0383"+
+ "\u0382\u0001\u0000\u0000\u0000\u0383\u0384\u0001\u0000\u0000\u0000\u0384"+
+ "\u0385\u0001\u0000\u0000\u0000\u0385\u0387\u0007\u0005\u0000\u0000\u0386"+
+ "\u0383\u0001\u0000\u0000\u0000\u0386\u0387\u0001\u0000\u0000\u0000\u0387"+
+ "\u0388\u0001\u0000\u0000\u0000\u0388\u0395\u0007\u0005\u0000\u0000\u0389"+
+ "\u038b\u0005\\\u0000\u0000\u038a\u038c\u0005u\u0000\u0000\u038b\u038a"+
+ "\u0001\u0000\u0000\u0000\u038c\u038d\u0001\u0000\u0000\u0000\u038d\u038b"+
+ "\u0001\u0000\u0000\u0000\u038d\u038e\u0001\u0000\u0000\u0000\u038e\u038f"+
+ "\u0001\u0000\u0000\u0000\u038f\u0390\u0003\u00e7s\u0000\u0390\u0391\u0003"+
+ "\u00e7s\u0000\u0391\u0392\u0003\u00e7s\u0000\u0392\u0393\u0003\u00e7s"+
+ "\u0000\u0393\u0395\u0001\u0000\u0000\u0000\u0394\u037f\u0001\u0000\u0000"+
+ "\u0000\u0394\u0381\u0001\u0000\u0000\u0000\u0394\u0389\u0001\u0000\u0000"+
+ "\u0000\u0395\u00e4\u0001\u0000\u0000\u0000\u0396\u039f\u0003\u00e7s\u0000"+
+ "\u0397\u039a\u0003\u00e7s\u0000\u0398\u039a\u0005_\u0000\u0000\u0399\u0397"+
+ "\u0001\u0000\u0000\u0000\u0399\u0398\u0001\u0000\u0000\u0000\u039a\u039d"+
+ "\u0001\u0000\u0000\u0000\u039b\u0399\u0001\u0000\u0000\u0000\u039b\u039c"+
+ "\u0001\u0000\u0000\u0000\u039c\u039e\u0001\u0000\u0000\u0000\u039d\u039b"+
+ "\u0001\u0000\u0000\u0000\u039e\u03a0\u0003\u00e7s\u0000\u039f\u039b\u0001"+
+ "\u0000\u0000\u0000\u039f\u03a0\u0001\u0000\u0000\u0000\u03a0\u00e6\u0001"+
+ "\u0000\u0000\u0000\u03a1\u03a2\u0007\u0003\u0000\u0000\u03a2\u00e8\u0001"+
+ "\u0000\u0000\u0000\u03a3\u03ab\u0007\u0014\u0000\u0000\u03a4\u03a6\u0007"+
+ "\u0015\u0000\u0000\u03a5\u03a4\u0001\u0000\u0000\u0000\u03a6\u03a9\u0001"+
+ "\u0000\u0000\u0000\u03a7\u03a5\u0001\u0000\u0000\u0000\u03a7\u03a8\u0001"+
+ "\u0000\u0000\u0000\u03a8\u03aa\u0001\u0000\u0000\u0000\u03a9\u03a7\u0001"+
+ "\u0000\u0000\u0000\u03aa\u03ac\u0007\u0014\u0000\u0000\u03ab\u03a7\u0001"+
+ "\u0000\u0000\u0000\u03ab\u03ac\u0001\u0000\u0000\u0000\u03ac\u00ea\u0001"+
+ "\u0000\u0000\u0000\u03ad\u03b0\u0003\u00edv\u0000\u03ae\u03b0\u0007\u0014"+
+ "\u0000\u0000\u03af\u03ad\u0001\u0000\u0000\u0000\u03af\u03ae\u0001\u0000"+
+ "\u0000\u0000\u03b0\u00ec\u0001\u0000\u0000\u0000\u03b1\u03b6\u0007\u0016"+
+ "\u0000\u0000\u03b2\u03b6\b\u0017\u0000\u0000\u03b3\u03b4\u0007\u0018\u0000"+
+ "\u0000\u03b4\u03b6\u0007\u0019\u0000\u0000\u03b5\u03b1\u0001\u0000\u0000"+
+ "\u0000\u03b5\u03b2\u0001\u0000\u0000\u0000\u03b5\u03b3\u0001\u0000\u0000"+
+ "\u0000\u03b6\u00ee\u0001\u0000\u0000\u00000\u0000\u0249\u024e\u0251\u0253"+
+ "\u0256\u025e\u0262\u0265\u026b\u0272\u0276\u0279\u0281\u0285\u0288\u028d"+
+ "\u0291\u0294\u0297\u029c\u029f\u02a1\u02a7\u02aa\u02ae\u02b2\u02b6\u02c1"+
+ "\u02c6\u02cd\u02cf\u0355\u035f\u036d\u0376\u037b\u0383\u0386\u038d\u0394"+
+ "\u0399\u039b\u039f\u03a7\u03ab\u03af\u03b5\u0001\u0000\u0001\u0000";
+ public static final ATN _ATN =
+ new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+ static {
+ _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+ for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+ _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+ }
+ }
+}
\ No newline at end of file
diff --git a/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.tokens b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.tokens
new file mode 100644
index 000000000..e94649840
--- /dev/null
+++ b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaLexer.tokens
@@ -0,0 +1,211 @@
+ABSTRACT=1
+ASSERT=2
+BOOLEAN=3
+BREAK=4
+BYTE=5
+CASE=6
+CATCH=7
+CHAR=8
+CLASS=9
+CONST=10
+CONTINUE=11
+DEFAULT=12
+DO=13
+DOUBLE=14
+ELSE=15
+ENUM=16
+EXTENDS=17
+FINAL=18
+FINALLY=19
+FLOAT=20
+FOR=21
+IF=22
+GOTO=23
+IMPLEMENTS=24
+IMPORT=25
+INSTANCEOF=26
+INT=27
+INTERFACE=28
+LONG=29
+NATIVE=30
+NEW=31
+PACKAGE=32
+PRIVATE=33
+PROTECTED=34
+PUBLIC=35
+RETURN=36
+SHORT=37
+STATIC=38
+STRICTFP=39
+SUPER=40
+SWITCH=41
+SYNCHRONIZED=42
+THIS=43
+THROW=44
+THROWS=45
+TRANSIENT=46
+TRY=47
+VAR=48
+VOID=49
+VOLATILE=50
+WHILE=51
+DECIMAL_LITERAL=52
+HEX_LITERAL=53
+OCT_LITERAL=54
+BINARY_LITERAL=55
+FLOAT_LITERAL=56
+HEX_FLOAT_LITERAL=57
+BOOL_LITERAL=58
+CHAR_LITERAL=59
+STRING_LITERAL=60
+NULL_LITERAL=61
+LPAREN=62
+RPAREN=63
+LBRACE=64
+RBRACE=65
+LBRACK=66
+RBRACK=67
+SEMI=68
+COMMA=69
+DOT=70
+ASSIGN=71
+GT=72
+LT=73
+BANG=74
+TILDE=75
+QUESTION=76
+COLON=77
+EQUAL=78
+LE=79
+GE=80
+NOTEQUAL=81
+AND=82
+OR=83
+INC=84
+DEC=85
+ADD=86
+SUB=87
+MUL=88
+DIV=89
+BITAND=90
+BITOR=91
+CARET=92
+MOD=93
+ADD_ASSIGN=94
+SUB_ASSIGN=95
+MUL_ASSIGN=96
+DIV_ASSIGN=97
+AND_ASSIGN=98
+OR_ASSIGN=99
+XOR_ASSIGN=100
+MOD_ASSIGN=101
+LSHIFT_ASSIGN=102
+RSHIFT_ASSIGN=103
+URSHIFT_ASSIGN=104
+ARROW=105
+COLONCOLON=106
+AT=107
+ELLIPSIS=108
+WS=109
+BLOCK_COMMENT=110
+LINE_COMMENT=111
+IDENTIFIER=112
+'abstract'=1
+'assert'=2
+'boolean'=3
+'break'=4
+'byte'=5
+'case'=6
+'catch'=7
+'char'=8
+'class'=9
+'const'=10
+'continue'=11
+'default'=12
+'do'=13
+'double'=14
+'else'=15
+'enum'=16
+'extends'=17
+'final'=18
+'finally'=19
+'float'=20
+'for'=21
+'if'=22
+'goto'=23
+'implements'=24
+'import'=25
+'instanceof'=26
+'int'=27
+'interface'=28
+'long'=29
+'native'=30
+'new'=31
+'package'=32
+'private'=33
+'protected'=34
+'public'=35
+'return'=36
+'short'=37
+'static'=38
+'strictfp'=39
+'super'=40
+'switch'=41
+'synchronized'=42
+'this'=43
+'throw'=44
+'throws'=45
+'transient'=46
+'try'=47
+'var'=48
+'void'=49
+'volatile'=50
+'while'=51
+'null'=61
+'('=62
+')'=63
+'{'=64
+'}'=65
+'['=66
+']'=67
+';'=68
+','=69
+'.'=70
+'='=71
+'>'=72
+'<'=73
+'!'=74
+'~'=75
+'?'=76
+':'=77
+'=='=78
+'<='=79
+'>='=80
+'!='=81
+'&&'=82
+'||'=83
+'++'=84
+'--'=85
+'+'=86
+'-'=87
+'*'=88
+'/'=89
+'&'=90
+'|'=91
+'^'=92
+'%'=93
+'+='=94
+'-='=95
+'*='=96
+'/='=97
+'&='=98
+'|='=99
+'^='=100
+'%='=101
+'<<='=102
+'>>='=103
+'>>>='=104
+'->'=105
+'::'=106
+'@'=107
+'...'=108
diff --git a/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaParser.interp b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaParser.interp
new file mode 100644
index 000000000..5c8d47046
--- /dev/null
+++ b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaParser.interp
@@ -0,0 +1,340 @@
+token literal names:
+null
+'abstract'
+'assert'
+'boolean'
+'break'
+'byte'
+'case'
+'catch'
+'char'
+'class'
+'const'
+'continue'
+'default'
+'do'
+'double'
+'else'
+'enum'
+'extends'
+'final'
+'finally'
+'float'
+'for'
+'if'
+'goto'
+'implements'
+'import'
+'instanceof'
+'int'
+'interface'
+'long'
+'native'
+'new'
+'package'
+'private'
+'protected'
+'public'
+'return'
+'short'
+'static'
+'strictfp'
+'super'
+'switch'
+'synchronized'
+'this'
+'throw'
+'throws'
+'transient'
+'try'
+'var'
+'void'
+'volatile'
+'while'
+null
+null
+null
+null
+null
+null
+null
+null
+null
+'null'
+'('
+')'
+'{'
+'}'
+'['
+']'
+';'
+','
+'.'
+'='
+'>'
+'<'
+'!'
+'~'
+'?'
+':'
+'=='
+'<='
+'>='
+'!='
+'&&'
+'||'
+'++'
+'--'
+'+'
+'-'
+'*'
+'/'
+'&'
+'|'
+'^'
+'%'
+'+='
+'-='
+'*='
+'/='
+'&='
+'|='
+'^='
+'%='
+'<<='
+'>>='
+'>>>='
+'->'
+'::'
+'@'
+'...'
+null
+null
+null
+null
+
+token symbolic names:
+null
+ABSTRACT
+ASSERT
+BOOLEAN
+BREAK
+BYTE
+CASE
+CATCH
+CHAR
+CLASS
+CONST
+CONTINUE
+DEFAULT
+DO
+DOUBLE
+ELSE
+ENUM
+EXTENDS
+FINAL
+FINALLY
+FLOAT
+FOR
+IF
+GOTO
+IMPLEMENTS
+IMPORT
+INSTANCEOF
+INT
+INTERFACE
+LONG
+NATIVE
+NEW
+PACKAGE
+PRIVATE
+PROTECTED
+PUBLIC
+RETURN
+SHORT
+STATIC
+STRICTFP
+SUPER
+SWITCH
+SYNCHRONIZED
+THIS
+THROW
+THROWS
+TRANSIENT
+TRY
+VAR
+VOID
+VOLATILE
+WHILE
+DECIMAL_LITERAL
+HEX_LITERAL
+OCT_LITERAL
+BINARY_LITERAL
+FLOAT_LITERAL
+HEX_FLOAT_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+NULL_LITERAL
+LPAREN
+RPAREN
+LBRACE
+RBRACE
+LBRACK
+RBRACK
+SEMI
+COMMA
+DOT
+ASSIGN
+GT
+LT
+BANG
+TILDE
+QUESTION
+COLON
+EQUAL
+LE
+GE
+NOTEQUAL
+AND
+OR
+INC
+DEC
+ADD
+SUB
+MUL
+DIV
+BITAND
+BITOR
+CARET
+MOD
+ADD_ASSIGN
+SUB_ASSIGN
+MUL_ASSIGN
+DIV_ASSIGN
+AND_ASSIGN
+OR_ASSIGN
+XOR_ASSIGN
+MOD_ASSIGN
+LSHIFT_ASSIGN
+RSHIFT_ASSIGN
+URSHIFT_ASSIGN
+ARROW
+COLONCOLON
+AT
+ELLIPSIS
+WS
+BLOCK_COMMENT
+LINE_COMMENT
+IDENTIFIER
+
+rule names:
+compilationUnit
+packageDeclaration
+importDeclaration
+typeDeclaration
+modifier
+classOrInterfaceModifier
+variableModifier
+classDeclaration
+typeParameters
+typeParameter
+typeBound
+enumDeclaration
+enumConstants
+enumConstant
+enumBodyDeclarations
+interfaceDeclaration
+classBody
+interfaceBody
+classBodyDeclaration
+memberDeclaration
+methodDeclaration
+methodBody
+typeTypeOrVoid
+genericMethodDeclaration
+genericConstructorDeclaration
+constructorDeclaration
+fieldDeclaration
+interfaceBodyDeclaration
+interfaceMemberDeclaration
+constDeclaration
+constantDeclarator
+interfaceMethodDeclaration
+interfaceMethodModifier
+genericInterfaceMethodDeclaration
+variableDeclarators
+variableDeclarator
+variableDeclaratorId
+variableInitializer
+arrayInitializer
+classOrInterfaceType
+typeArgument
+qualifiedNameList
+formalParameters
+formalParameterList
+formalParameter
+lastFormalParameter
+qualifiedName
+literal
+integerLiteral
+floatLiteral
+altAnnotationQualifiedName
+annotation
+elementValuePairs
+elementValuePair
+elementValue
+elementValueArrayInitializer
+annotationTypeDeclaration
+annotationTypeBody
+annotationTypeElementDeclaration
+annotationTypeElementRest
+annotationMethodOrConstantRest
+annotationMethodRest
+annotationConstantRest
+defaultValue
+block
+blockStatement
+localVariableDeclaration
+localTypeDeclaration
+statement
+catchClause
+catchType
+finallyBlock
+resourceSpecification
+resources
+resource
+switchBlockStatementGroup
+switchLabel
+forControl
+forInit
+enhancedForControl
+parExpression
+expressionList
+methodCall
+expression
+lambdaExpression
+lambdaParameters
+lambdaBody
+primary
+classType
+creator
+createdName
+innerCreator
+arrayCreatorRest
+classCreatorRest
+explicitGenericInvocation
+typeArgumentsOrDiamond
+nonWildcardTypeArgumentsOrDiamond
+nonWildcardTypeArguments
+typeList
+typeType
+primitiveType
+typeArguments
+superSuffix
+explicitGenericInvocationSuffix
+arguments
+
+
+atn:
+[4, 1, 112, 1437, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 1, 0, 3, 0, 212, 8, 0, 1, 0, 5, 0, 215, 8, 0, 10, 0, 12, 0, 218, 9, 0, 1, 0, 5, 0, 221, 8, 0, 10, 0, 12, 0, 224, 9, 0, 1, 0, 1, 0, 1, 1, 5, 1, 229, 8, 1, 10, 1, 12, 1, 232, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 240, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 245, 8, 2, 1, 2, 1, 2, 1, 3, 5, 3, 250, 8, 3, 10, 3, 12, 3, 253, 9, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 259, 8, 3, 1, 3, 3, 3, 262, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 269, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 279, 8, 5, 1, 6, 1, 6, 3, 6, 283, 8, 6, 1, 7, 1, 7, 1, 7, 3, 7, 288, 8, 7, 1, 7, 1, 7, 3, 7, 292, 8, 7, 1, 7, 1, 7, 3, 7, 296, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 304, 8, 8, 10, 8, 12, 8, 307, 9, 8, 1, 8, 1, 8, 1, 9, 5, 9, 312, 8, 9, 10, 9, 12, 9, 315, 9, 9, 1, 9, 1, 9, 1, 9, 5, 9, 320, 8, 9, 10, 9, 12, 9, 323, 9, 9, 1, 9, 3, 9, 326, 8, 9, 1, 10, 1, 10, 1, 10, 5, 10, 331, 8, 10, 10, 10, 12, 10, 334, 9, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 340, 8, 11, 1, 11, 1, 11, 3, 11, 344, 8, 11, 1, 11, 3, 11, 347, 8, 11, 1, 11, 3, 11, 350, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 5, 12, 357, 8, 12, 10, 12, 12, 12, 360, 9, 12, 1, 13, 5, 13, 363, 8, 13, 10, 13, 12, 13, 366, 9, 13, 1, 13, 1, 13, 3, 13, 370, 8, 13, 1, 13, 3, 13, 373, 8, 13, 1, 14, 1, 14, 5, 14, 377, 8, 14, 10, 14, 12, 14, 380, 9, 14, 1, 15, 1, 15, 1, 15, 3, 15, 385, 8, 15, 1, 15, 1, 15, 3, 15, 389, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 5, 16, 395, 8, 16, 10, 16, 12, 16, 398, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 5, 17, 404, 8, 17, 10, 17, 12, 17, 407, 9, 17, 1, 17, 1, 17, 1, 18, 1, 18, 3, 18, 413, 8, 18, 1, 18, 1, 18, 5, 18, 417, 8, 18, 10, 18, 12, 18, 420, 9, 18, 1, 18, 3, 18, 423, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 434, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 441, 8, 20, 10, 20, 12, 20, 444, 9, 20, 1, 20, 1, 20, 3, 20, 448, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 3, 21, 454, 8, 21, 1, 22, 1, 22, 3, 22, 458, 8, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 470, 8, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 5, 27, 479, 8, 27, 10, 27, 12, 27, 482, 9, 27, 1, 27, 1, 27, 3, 27, 486, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 495, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 501, 8, 29, 10, 29, 12, 29, 504, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 5, 30, 511, 8, 30, 10, 30, 12, 30, 514, 9, 30, 1, 30, 1, 30, 1, 30, 1, 31, 5, 31, 520, 8, 31, 10, 31, 12, 31, 523, 9, 31, 1, 31, 1, 31, 1, 31, 5, 31, 528, 8, 31, 10, 31, 12, 31, 531, 9, 31, 1, 31, 1, 31, 3, 31, 535, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 541, 8, 31, 10, 31, 12, 31, 544, 9, 31, 1, 31, 1, 31, 3, 31, 548, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 558, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 5, 34, 566, 8, 34, 10, 34, 12, 34, 569, 9, 34, 1, 35, 1, 35, 1, 35, 3, 35, 574, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 579, 8, 36, 10, 36, 12, 36, 582, 9, 36, 1, 37, 1, 37, 3, 37, 586, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 5, 38, 592, 8, 38, 10, 38, 12, 38, 595, 9, 38, 1, 38, 3, 38, 598, 8, 38, 3, 38, 600, 8, 38, 1, 38, 1, 38, 1, 39, 1, 39, 3, 39, 606, 8, 39, 1, 39, 1, 39, 1, 39, 3, 39, 611, 8, 39, 5, 39, 613, 8, 39, 10, 39, 12, 39, 616, 9, 39, 1, 40, 1, 40, 5, 40, 620, 8, 40, 10, 40, 12, 40, 623, 9, 40, 1, 40, 1, 40, 1, 40, 3, 40, 628, 8, 40, 3, 40, 630, 8, 40, 1, 41, 1, 41, 1, 41, 5, 41, 635, 8, 41, 10, 41, 12, 41, 638, 9, 41, 1, 42, 1, 42, 3, 42, 642, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 5, 43, 649, 8, 43, 10, 43, 12, 43, 652, 9, 43, 1, 43, 1, 43, 3, 43, 656, 8, 43, 1, 43, 3, 43, 659, 8, 43, 1, 44, 5, 44, 662, 8, 44, 10, 44, 12, 44, 665, 9, 44, 1, 44, 1, 44, 1, 44, 1, 45, 5, 45, 671, 8, 45, 10, 45, 12, 45, 674, 9, 45, 1, 45, 1, 45, 5, 45, 678, 8, 45, 10, 45, 12, 45, 681, 9, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 5, 46, 689, 8, 46, 10, 46, 12, 46, 692, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 700, 8, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 5, 50, 708, 8, 50, 10, 50, 12, 50, 711, 9, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 3, 51, 719, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 724, 8, 51, 1, 51, 3, 51, 727, 8, 51, 1, 52, 1, 52, 1, 52, 5, 52, 732, 8, 52, 10, 52, 12, 52, 735, 9, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 3, 54, 744, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 750, 8, 55, 10, 55, 12, 55, 753, 9, 55, 3, 55, 755, 8, 55, 1, 55, 3, 55, 758, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 5, 57, 769, 8, 57, 10, 57, 12, 57, 772, 9, 57, 1, 57, 1, 57, 1, 58, 5, 58, 777, 8, 58, 10, 58, 12, 58, 780, 9, 58, 1, 58, 1, 58, 3, 58, 784, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 792, 8, 59, 1, 59, 1, 59, 3, 59, 796, 8, 59, 1, 59, 1, 59, 3, 59, 800, 8, 59, 1, 59, 1, 59, 3, 59, 804, 8, 59, 3, 59, 806, 8, 59, 1, 60, 1, 60, 3, 60, 810, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 816, 8, 61, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 5, 64, 825, 8, 64, 10, 64, 12, 64, 828, 9, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 837, 8, 65, 1, 66, 5, 66, 840, 8, 66, 10, 66, 12, 66, 843, 9, 66, 1, 66, 1, 66, 1, 66, 1, 67, 5, 67, 849, 8, 67, 10, 67, 12, 67, 852, 9, 67, 1, 67, 1, 67, 3, 67, 856, 8, 67, 1, 67, 3, 67, 859, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 866, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 875, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 4, 68, 896, 8, 68, 11, 68, 12, 68, 897, 1, 68, 3, 68, 901, 8, 68, 1, 68, 3, 68, 904, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 5, 68, 910, 8, 68, 10, 68, 12, 68, 913, 9, 68, 1, 68, 3, 68, 916, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 5, 68, 922, 8, 68, 10, 68, 12, 68, 925, 9, 68, 1, 68, 5, 68, 928, 8, 68, 10, 68, 12, 68, 931, 9, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 941, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 950, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 955, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 965, 8, 68, 1, 69, 1, 69, 1, 69, 5, 69, 970, 8, 69, 10, 69, 12, 69, 973, 9, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 5, 70, 983, 8, 70, 10, 70, 12, 70, 986, 9, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 3, 72, 994, 8, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 5, 73, 1001, 8, 73, 10, 73, 12, 73, 1004, 9, 73, 1, 74, 5, 74, 1007, 8, 74, 10, 74, 12, 74, 1010, 9, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 4, 75, 1018, 8, 75, 11, 75, 12, 75, 1019, 1, 75, 4, 75, 1023, 8, 75, 11, 75, 12, 75, 1024, 1, 76, 1, 76, 1, 76, 3, 76, 1030, 8, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1035, 8, 76, 1, 77, 1, 77, 3, 77, 1039, 8, 77, 1, 77, 1, 77, 3, 77, 1043, 8, 77, 1, 77, 1, 77, 3, 77, 1047, 8, 77, 3, 77, 1049, 8, 77, 1, 78, 1, 78, 3, 78, 1053, 8, 78, 1, 79, 5, 79, 1056, 8, 79, 10, 79, 12, 79, 1059, 9, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 5, 81, 1073, 8, 81, 10, 81, 12, 81, 1076, 9, 81, 1, 82, 1, 82, 1, 82, 3, 82, 1081, 8, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1087, 8, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1093, 8, 82, 1, 82, 3, 82, 1096, 8, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 1105, 8, 83, 10, 83, 12, 83, 1108, 9, 83, 1, 83, 1, 83, 1, 83, 5, 83, 1113, 8, 83, 10, 83, 12, 83, 1116, 9, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1129, 8, 83, 1, 83, 1, 83, 3, 83, 1133, 8, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1138, 8, 83, 1, 83, 1, 83, 3, 83, 1142, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1158, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1198, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1204, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1219, 8, 83, 1, 83, 5, 83, 1222, 8, 83, 10, 83, 12, 83, 1225, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1234, 8, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 1241, 8, 85, 10, 85, 12, 85, 1244, 9, 85, 1, 85, 3, 85, 1247, 8, 85, 1, 86, 1, 86, 3, 86, 1251, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1269, 8, 87, 3, 87, 1271, 8, 87, 1, 88, 1, 88, 1, 88, 3, 88, 1276, 8, 88, 1, 88, 5, 88, 1279, 8, 88, 10, 88, 12, 88, 1282, 9, 88, 1, 88, 1, 88, 3, 88, 1286, 8, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1295, 8, 89, 3, 89, 1297, 8, 89, 1, 90, 1, 90, 3, 90, 1301, 8, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1306, 8, 90, 5, 90, 1308, 8, 90, 10, 90, 12, 90, 1311, 9, 90, 1, 90, 3, 90, 1314, 8, 90, 1, 91, 1, 91, 3, 91, 1318, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 5, 92, 1326, 8, 92, 10, 92, 12, 92, 1329, 9, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 5, 92, 1338, 8, 92, 10, 92, 12, 92, 1341, 9, 92, 1, 92, 1, 92, 5, 92, 1345, 8, 92, 10, 92, 12, 92, 1348, 9, 92, 3, 92, 1350, 8, 92, 1, 93, 1, 93, 3, 93, 1354, 8, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 3, 95, 1362, 8, 95, 1, 96, 1, 96, 1, 96, 3, 96, 1367, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 5, 98, 1376, 8, 98, 10, 98, 12, 98, 1379, 9, 98, 1, 99, 5, 99, 1382, 8, 99, 10, 99, 12, 99, 1385, 9, 99, 1, 99, 1, 99, 3, 99, 1389, 8, 99, 1, 99, 5, 99, 1392, 8, 99, 10, 99, 12, 99, 1395, 9, 99, 1, 99, 1, 99, 5, 99, 1399, 8, 99, 10, 99, 12, 99, 1402, 9, 99, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 1410, 8, 101, 10, 101, 12, 101, 1413, 9, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 1421, 8, 102, 3, 102, 1423, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1429, 8, 103, 1, 104, 1, 104, 3, 104, 1433, 8, 104, 1, 104, 1, 104, 1, 104, 0, 1, 166, 105, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 0, 12, 2, 0, 17, 17, 40, 40, 1, 0, 52, 55, 1, 0, 56, 57, 1, 0, 84, 87, 1, 0, 74, 75, 2, 0, 88, 89, 93, 93, 1, 0, 86, 87, 2, 0, 72, 73, 79, 80, 2, 0, 78, 78, 81, 81, 2, 0, 71, 71, 94, 104, 1, 0, 84, 85, 8, 0, 3, 3, 5, 5, 8, 8, 14, 14, 20, 20, 27, 27, 29, 29, 37, 37, 1597, 0, 211, 1, 0, 0, 0, 2, 230, 1, 0, 0, 0, 4, 237, 1, 0, 0, 0, 6, 261, 1, 0, 0, 0, 8, 268, 1, 0, 0, 0, 10, 278, 1, 0, 0, 0, 12, 282, 1, 0, 0, 0, 14, 284, 1, 0, 0, 0, 16, 299, 1, 0, 0, 0, 18, 313, 1, 0, 0, 0, 20, 327, 1, 0, 0, 0, 22, 335, 1, 0, 0, 0, 24, 353, 1, 0, 0, 0, 26, 364, 1, 0, 0, 0, 28, 374, 1, 0, 0, 0, 30, 381, 1, 0, 0, 0, 32, 392, 1, 0, 0, 0, 34, 401, 1, 0, 0, 0, 36, 422, 1, 0, 0, 0, 38, 433, 1, 0, 0, 0, 40, 435, 1, 0, 0, 0, 42, 453, 1, 0, 0, 0, 44, 457, 1, 0, 0, 0, 46, 459, 1, 0, 0, 0, 48, 462, 1, 0, 0, 0, 50, 465, 1, 0, 0, 0, 52, 473, 1, 0, 0, 0, 54, 485, 1, 0, 0, 0, 56, 494, 1, 0, 0, 0, 58, 496, 1, 0, 0, 0, 60, 507, 1, 0, 0, 0, 62, 521, 1, 0, 0, 0, 64, 557, 1, 0, 0, 0, 66, 559, 1, 0, 0, 0, 68, 562, 1, 0, 0, 0, 70, 570, 1, 0, 0, 0, 72, 575, 1, 0, 0, 0, 74, 585, 1, 0, 0, 0, 76, 587, 1, 0, 0, 0, 78, 603, 1, 0, 0, 0, 80, 629, 1, 0, 0, 0, 82, 631, 1, 0, 0, 0, 84, 639, 1, 0, 0, 0, 86, 658, 1, 0, 0, 0, 88, 663, 1, 0, 0, 0, 90, 672, 1, 0, 0, 0, 92, 685, 1, 0, 0, 0, 94, 699, 1, 0, 0, 0, 96, 701, 1, 0, 0, 0, 98, 703, 1, 0, 0, 0, 100, 709, 1, 0, 0, 0, 102, 718, 1, 0, 0, 0, 104, 728, 1, 0, 0, 0, 106, 736, 1, 0, 0, 0, 108, 743, 1, 0, 0, 0, 110, 745, 1, 0, 0, 0, 112, 761, 1, 0, 0, 0, 114, 766, 1, 0, 0, 0, 116, 783, 1, 0, 0, 0, 118, 805, 1, 0, 0, 0, 120, 809, 1, 0, 0, 0, 122, 811, 1, 0, 0, 0, 124, 817, 1, 0, 0, 0, 126, 819, 1, 0, 0, 0, 128, 822, 1, 0, 0, 0, 130, 836, 1, 0, 0, 0, 132, 841, 1, 0, 0, 0, 134, 858, 1, 0, 0, 0, 136, 964, 1, 0, 0, 0, 138, 966, 1, 0, 0, 0, 140, 979, 1, 0, 0, 0, 142, 987, 1, 0, 0, 0, 144, 990, 1, 0, 0, 0, 146, 997, 1, 0, 0, 0, 148, 1008, 1, 0, 0, 0, 150, 1017, 1, 0, 0, 0, 152, 1034, 1, 0, 0, 0, 154, 1048, 1, 0, 0, 0, 156, 1052, 1, 0, 0, 0, 158, 1057, 1, 0, 0, 0, 160, 1065, 1, 0, 0, 0, 162, 1069, 1, 0, 0, 0, 164, 1095, 1, 0, 0, 0, 166, 1141, 1, 0, 0, 0, 168, 1226, 1, 0, 0, 0, 170, 1246, 1, 0, 0, 0, 172, 1250, 1, 0, 0, 0, 174, 1270, 1, 0, 0, 0, 176, 1275, 1, 0, 0, 0, 178, 1296, 1, 0, 0, 0, 180, 1313, 1, 0, 0, 0, 182, 1315, 1, 0, 0, 0, 184, 1321, 1, 0, 0, 0, 186, 1351, 1, 0, 0, 0, 188, 1355, 1, 0, 0, 0, 190, 1361, 1, 0, 0, 0, 192, 1366, 1, 0, 0, 0, 194, 1368, 1, 0, 0, 0, 196, 1372, 1, 0, 0, 0, 198, 1383, 1, 0, 0, 0, 200, 1403, 1, 0, 0, 0, 202, 1405, 1, 0, 0, 0, 204, 1422, 1, 0, 0, 0, 206, 1428, 1, 0, 0, 0, 208, 1430, 1, 0, 0, 0, 210, 212, 3, 2, 1, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 216, 1, 0, 0, 0, 213, 215, 3, 4, 2, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 222, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 221, 3, 6, 3, 0, 220, 219, 1, 0, 0, 0, 221, 224, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 225, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 225, 226, 5, 0, 0, 1, 226, 1, 1, 0, 0, 0, 227, 229, 3, 102, 51, 0, 228, 227, 1, 0, 0, 0, 229, 232, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 233, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 233, 234, 5, 32, 0, 0, 234, 235, 3, 92, 46, 0, 235, 236, 5, 68, 0, 0, 236, 3, 1, 0, 0, 0, 237, 239, 5, 25, 0, 0, 238, 240, 5, 38, 0, 0, 239, 238, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 244, 3, 92, 46, 0, 242, 243, 5, 70, 0, 0, 243, 245, 5, 88, 0, 0, 244, 242, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 5, 68, 0, 0, 247, 5, 1, 0, 0, 0, 248, 250, 3, 10, 5, 0, 249, 248, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 258, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 259, 3, 14, 7, 0, 255, 259, 3, 22, 11, 0, 256, 259, 3, 30, 15, 0, 257, 259, 3, 112, 56, 0, 258, 254, 1, 0, 0, 0, 258, 255, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 257, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 262, 5, 68, 0, 0, 261, 251, 1, 0, 0, 0, 261, 260, 1, 0, 0, 0, 262, 7, 1, 0, 0, 0, 263, 269, 3, 10, 5, 0, 264, 269, 5, 30, 0, 0, 265, 269, 5, 42, 0, 0, 266, 269, 5, 46, 0, 0, 267, 269, 5, 50, 0, 0, 268, 263, 1, 0, 0, 0, 268, 264, 1, 0, 0, 0, 268, 265, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 268, 267, 1, 0, 0, 0, 269, 9, 1, 0, 0, 0, 270, 279, 3, 102, 51, 0, 271, 279, 5, 35, 0, 0, 272, 279, 5, 34, 0, 0, 273, 279, 5, 33, 0, 0, 274, 279, 5, 38, 0, 0, 275, 279, 5, 1, 0, 0, 276, 279, 5, 18, 0, 0, 277, 279, 5, 39, 0, 0, 278, 270, 1, 0, 0, 0, 278, 271, 1, 0, 0, 0, 278, 272, 1, 0, 0, 0, 278, 273, 1, 0, 0, 0, 278, 274, 1, 0, 0, 0, 278, 275, 1, 0, 0, 0, 278, 276, 1, 0, 0, 0, 278, 277, 1, 0, 0, 0, 279, 11, 1, 0, 0, 0, 280, 283, 5, 18, 0, 0, 281, 283, 3, 102, 51, 0, 282, 280, 1, 0, 0, 0, 282, 281, 1, 0, 0, 0, 283, 13, 1, 0, 0, 0, 284, 285, 5, 9, 0, 0, 285, 287, 5, 112, 0, 0, 286, 288, 3, 16, 8, 0, 287, 286, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 290, 5, 17, 0, 0, 290, 292, 3, 198, 99, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 295, 1, 0, 0, 0, 293, 294, 5, 24, 0, 0, 294, 296, 3, 196, 98, 0, 295, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 298, 3, 32, 16, 0, 298, 15, 1, 0, 0, 0, 299, 300, 5, 73, 0, 0, 300, 305, 3, 18, 9, 0, 301, 302, 5, 69, 0, 0, 302, 304, 3, 18, 9, 0, 303, 301, 1, 0, 0, 0, 304, 307, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 308, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 308, 309, 5, 72, 0, 0, 309, 17, 1, 0, 0, 0, 310, 312, 3, 102, 51, 0, 311, 310, 1, 0, 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 325, 5, 112, 0, 0, 317, 321, 5, 17, 0, 0, 318, 320, 3, 102, 51, 0, 319, 318, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 324, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, 326, 3, 20, 10, 0, 325, 317, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 19, 1, 0, 0, 0, 327, 332, 3, 198, 99, 0, 328, 329, 5, 90, 0, 0, 329, 331, 3, 198, 99, 0, 330, 328, 1, 0, 0, 0, 331, 334, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 21, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 335, 336, 5, 16, 0, 0, 336, 339, 5, 112, 0, 0, 337, 338, 5, 24, 0, 0, 338, 340, 3, 196, 98, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 343, 5, 64, 0, 0, 342, 344, 3, 24, 12, 0, 343, 342, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 1, 0, 0, 0, 345, 347, 5, 69, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 349, 1, 0, 0, 0, 348, 350, 3, 28, 14, 0, 349, 348, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 5, 65, 0, 0, 352, 23, 1, 0, 0, 0, 353, 358, 3, 26, 13, 0, 354, 355, 5, 69, 0, 0, 355, 357, 3, 26, 13, 0, 356, 354, 1, 0, 0, 0, 357, 360, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 25, 1, 0, 0, 0, 360, 358, 1, 0, 0, 0, 361, 363, 3, 102, 51, 0, 362, 361, 1, 0, 0, 0, 363, 366, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 367, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 369, 5, 112, 0, 0, 368, 370, 3, 208, 104, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 373, 3, 32, 16, 0, 372, 371, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 27, 1, 0, 0, 0, 374, 378, 5, 68, 0, 0, 375, 377, 3, 36, 18, 0, 376, 375, 1, 0, 0, 0, 377, 380, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 29, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 381, 382, 5, 28, 0, 0, 382, 384, 5, 112, 0, 0, 383, 385, 3, 16, 8, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 388, 1, 0, 0, 0, 386, 387, 5, 17, 0, 0, 387, 389, 3, 196, 98, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 391, 3, 34, 17, 0, 391, 31, 1, 0, 0, 0, 392, 396, 5, 64, 0, 0, 393, 395, 3, 36, 18, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 65, 0, 0, 400, 33, 1, 0, 0, 0, 401, 405, 5, 64, 0, 0, 402, 404, 3, 54, 27, 0, 403, 402, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 408, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 408, 409, 5, 65, 0, 0, 409, 35, 1, 0, 0, 0, 410, 423, 5, 68, 0, 0, 411, 413, 5, 38, 0, 0, 412, 411, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 423, 3, 128, 64, 0, 415, 417, 3, 8, 4, 0, 416, 415, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 421, 423, 3, 38, 19, 0, 422, 410, 1, 0, 0, 0, 422, 412, 1, 0, 0, 0, 422, 418, 1, 0, 0, 0, 423, 37, 1, 0, 0, 0, 424, 434, 3, 40, 20, 0, 425, 434, 3, 46, 23, 0, 426, 434, 3, 52, 26, 0, 427, 434, 3, 50, 25, 0, 428, 434, 3, 48, 24, 0, 429, 434, 3, 30, 15, 0, 430, 434, 3, 112, 56, 0, 431, 434, 3, 14, 7, 0, 432, 434, 3, 22, 11, 0, 433, 424, 1, 0, 0, 0, 433, 425, 1, 0, 0, 0, 433, 426, 1, 0, 0, 0, 433, 427, 1, 0, 0, 0, 433, 428, 1, 0, 0, 0, 433, 429, 1, 0, 0, 0, 433, 430, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 433, 432, 1, 0, 0, 0, 434, 39, 1, 0, 0, 0, 435, 436, 3, 44, 22, 0, 436, 437, 5, 112, 0, 0, 437, 442, 3, 84, 42, 0, 438, 439, 5, 66, 0, 0, 439, 441, 5, 67, 0, 0, 440, 438, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 447, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 5, 45, 0, 0, 446, 448, 3, 82, 41, 0, 447, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 3, 42, 21, 0, 450, 41, 1, 0, 0, 0, 451, 454, 3, 128, 64, 0, 452, 454, 5, 68, 0, 0, 453, 451, 1, 0, 0, 0, 453, 452, 1, 0, 0, 0, 454, 43, 1, 0, 0, 0, 455, 458, 3, 198, 99, 0, 456, 458, 5, 49, 0, 0, 457, 455, 1, 0, 0, 0, 457, 456, 1, 0, 0, 0, 458, 45, 1, 0, 0, 0, 459, 460, 3, 16, 8, 0, 460, 461, 3, 40, 20, 0, 461, 47, 1, 0, 0, 0, 462, 463, 3, 16, 8, 0, 463, 464, 3, 50, 25, 0, 464, 49, 1, 0, 0, 0, 465, 466, 5, 112, 0, 0, 466, 469, 3, 84, 42, 0, 467, 468, 5, 45, 0, 0, 468, 470, 3, 82, 41, 0, 469, 467, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 472, 3, 128, 64, 0, 472, 51, 1, 0, 0, 0, 473, 474, 3, 198, 99, 0, 474, 475, 3, 68, 34, 0, 475, 476, 5, 68, 0, 0, 476, 53, 1, 0, 0, 0, 477, 479, 3, 8, 4, 0, 478, 477, 1, 0, 0, 0, 479, 482, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 483, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 483, 486, 3, 56, 28, 0, 484, 486, 5, 68, 0, 0, 485, 480, 1, 0, 0, 0, 485, 484, 1, 0, 0, 0, 486, 55, 1, 0, 0, 0, 487, 495, 3, 58, 29, 0, 488, 495, 3, 62, 31, 0, 489, 495, 3, 66, 33, 0, 490, 495, 3, 30, 15, 0, 491, 495, 3, 112, 56, 0, 492, 495, 3, 14, 7, 0, 493, 495, 3, 22, 11, 0, 494, 487, 1, 0, 0, 0, 494, 488, 1, 0, 0, 0, 494, 489, 1, 0, 0, 0, 494, 490, 1, 0, 0, 0, 494, 491, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 494, 493, 1, 0, 0, 0, 495, 57, 1, 0, 0, 0, 496, 497, 3, 198, 99, 0, 497, 502, 3, 60, 30, 0, 498, 499, 5, 69, 0, 0, 499, 501, 3, 60, 30, 0, 500, 498, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 505, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 506, 5, 68, 0, 0, 506, 59, 1, 0, 0, 0, 507, 512, 5, 112, 0, 0, 508, 509, 5, 66, 0, 0, 509, 511, 5, 67, 0, 0, 510, 508, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 515, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 5, 71, 0, 0, 516, 517, 3, 74, 37, 0, 517, 61, 1, 0, 0, 0, 518, 520, 3, 64, 32, 0, 519, 518, 1, 0, 0, 0, 520, 523, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 534, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 524, 535, 3, 44, 22, 0, 525, 529, 3, 16, 8, 0, 526, 528, 3, 102, 51, 0, 527, 526, 1, 0, 0, 0, 528, 531, 1, 0, 0, 0, 529, 527, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 532, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 532, 533, 3, 44, 22, 0, 533, 535, 1, 0, 0, 0, 534, 524, 1, 0, 0, 0, 534, 525, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 537, 5, 112, 0, 0, 537, 542, 3, 84, 42, 0, 538, 539, 5, 66, 0, 0, 539, 541, 5, 67, 0, 0, 540, 538, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 547, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 545, 546, 5, 45, 0, 0, 546, 548, 3, 82, 41, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 3, 42, 21, 0, 550, 63, 1, 0, 0, 0, 551, 558, 3, 102, 51, 0, 552, 558, 5, 35, 0, 0, 553, 558, 5, 1, 0, 0, 554, 558, 5, 12, 0, 0, 555, 558, 5, 38, 0, 0, 556, 558, 5, 39, 0, 0, 557, 551, 1, 0, 0, 0, 557, 552, 1, 0, 0, 0, 557, 553, 1, 0, 0, 0, 557, 554, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 556, 1, 0, 0, 0, 558, 65, 1, 0, 0, 0, 559, 560, 3, 16, 8, 0, 560, 561, 3, 62, 31, 0, 561, 67, 1, 0, 0, 0, 562, 567, 3, 70, 35, 0, 563, 564, 5, 69, 0, 0, 564, 566, 3, 70, 35, 0, 565, 563, 1, 0, 0, 0, 566, 569, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 69, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 573, 3, 72, 36, 0, 571, 572, 5, 71, 0, 0, 572, 574, 3, 74, 37, 0, 573, 571, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 71, 1, 0, 0, 0, 575, 580, 5, 112, 0, 0, 576, 577, 5, 66, 0, 0, 577, 579, 5, 67, 0, 0, 578, 576, 1, 0, 0, 0, 579, 582, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 73, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 583, 586, 3, 76, 38, 0, 584, 586, 3, 166, 83, 0, 585, 583, 1, 0, 0, 0, 585, 584, 1, 0, 0, 0, 586, 75, 1, 0, 0, 0, 587, 599, 5, 64, 0, 0, 588, 593, 3, 74, 37, 0, 589, 590, 5, 69, 0, 0, 590, 592, 3, 74, 37, 0, 591, 589, 1, 0, 0, 0, 592, 595, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 596, 598, 5, 69, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 1, 0, 0, 0, 599, 588, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 602, 5, 65, 0, 0, 602, 77, 1, 0, 0, 0, 603, 605, 5, 112, 0, 0, 604, 606, 3, 202, 101, 0, 605, 604, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 614, 1, 0, 0, 0, 607, 608, 5, 70, 0, 0, 608, 610, 5, 112, 0, 0, 609, 611, 3, 202, 101, 0, 610, 609, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 613, 1, 0, 0, 0, 612, 607, 1, 0, 0, 0, 613, 616, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 79, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 617, 630, 3, 198, 99, 0, 618, 620, 3, 102, 51, 0, 619, 618, 1, 0, 0, 0, 620, 623, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 1, 0, 0, 0, 623, 621, 1, 0, 0, 0, 624, 627, 5, 76, 0, 0, 625, 626, 7, 0, 0, 0, 626, 628, 3, 198, 99, 0, 627, 625, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 630, 1, 0, 0, 0, 629, 617, 1, 0, 0, 0, 629, 621, 1, 0, 0, 0, 630, 81, 1, 0, 0, 0, 631, 636, 3, 92, 46, 0, 632, 633, 5, 69, 0, 0, 633, 635, 3, 92, 46, 0, 634, 632, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 83, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 641, 5, 62, 0, 0, 640, 642, 3, 86, 43, 0, 641, 640, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 5, 63, 0, 0, 644, 85, 1, 0, 0, 0, 645, 650, 3, 88, 44, 0, 646, 647, 5, 69, 0, 0, 647, 649, 3, 88, 44, 0, 648, 646, 1, 0, 0, 0, 649, 652, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 655, 1, 0, 0, 0, 652, 650, 1, 0, 0, 0, 653, 654, 5, 69, 0, 0, 654, 656, 3, 90, 45, 0, 655, 653, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 659, 1, 0, 0, 0, 657, 659, 3, 90, 45, 0, 658, 645, 1, 0, 0, 0, 658, 657, 1, 0, 0, 0, 659, 87, 1, 0, 0, 0, 660, 662, 3, 12, 6, 0, 661, 660, 1, 0, 0, 0, 662, 665, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 666, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 666, 667, 3, 198, 99, 0, 667, 668, 3, 72, 36, 0, 668, 89, 1, 0, 0, 0, 669, 671, 3, 12, 6, 0, 670, 669, 1, 0, 0, 0, 671, 674, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 675, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 675, 679, 3, 198, 99, 0, 676, 678, 3, 102, 51, 0, 677, 676, 1, 0, 0, 0, 678, 681, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 682, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 682, 683, 5, 108, 0, 0, 683, 684, 3, 72, 36, 0, 684, 91, 1, 0, 0, 0, 685, 690, 5, 112, 0, 0, 686, 687, 5, 70, 0, 0, 687, 689, 5, 112, 0, 0, 688, 686, 1, 0, 0, 0, 689, 692, 1, 0, 0, 0, 690, 688, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 93, 1, 0, 0, 0, 692, 690, 1, 0, 0, 0, 693, 700, 3, 96, 48, 0, 694, 700, 3, 98, 49, 0, 695, 700, 5, 59, 0, 0, 696, 700, 5, 60, 0, 0, 697, 700, 5, 58, 0, 0, 698, 700, 5, 61, 0, 0, 699, 693, 1, 0, 0, 0, 699, 694, 1, 0, 0, 0, 699, 695, 1, 0, 0, 0, 699, 696, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 698, 1, 0, 0, 0, 700, 95, 1, 0, 0, 0, 701, 702, 7, 1, 0, 0, 702, 97, 1, 0, 0, 0, 703, 704, 7, 2, 0, 0, 704, 99, 1, 0, 0, 0, 705, 706, 5, 112, 0, 0, 706, 708, 5, 70, 0, 0, 707, 705, 1, 0, 0, 0, 708, 711, 1, 0, 0, 0, 709, 707, 1, 0, 0, 0, 709, 710, 1, 0, 0, 0, 710, 712, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 712, 713, 5, 107, 0, 0, 713, 714, 5, 112, 0, 0, 714, 101, 1, 0, 0, 0, 715, 716, 5, 107, 0, 0, 716, 719, 3, 92, 46, 0, 717, 719, 3, 100, 50, 0, 718, 715, 1, 0, 0, 0, 718, 717, 1, 0, 0, 0, 719, 726, 1, 0, 0, 0, 720, 723, 5, 62, 0, 0, 721, 724, 3, 104, 52, 0, 722, 724, 3, 108, 54, 0, 723, 721, 1, 0, 0, 0, 723, 722, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 727, 5, 63, 0, 0, 726, 720, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 103, 1, 0, 0, 0, 728, 733, 3, 106, 53, 0, 729, 730, 5, 69, 0, 0, 730, 732, 3, 106, 53, 0, 731, 729, 1, 0, 0, 0, 732, 735, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 105, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 737, 5, 112, 0, 0, 737, 738, 5, 71, 0, 0, 738, 739, 3, 108, 54, 0, 739, 107, 1, 0, 0, 0, 740, 744, 3, 166, 83, 0, 741, 744, 3, 102, 51, 0, 742, 744, 3, 110, 55, 0, 743, 740, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 743, 742, 1, 0, 0, 0, 744, 109, 1, 0, 0, 0, 745, 754, 5, 64, 0, 0, 746, 751, 3, 108, 54, 0, 747, 748, 5, 69, 0, 0, 748, 750, 3, 108, 54, 0, 749, 747, 1, 0, 0, 0, 750, 753, 1, 0, 0, 0, 751, 749, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 755, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 754, 746, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 757, 1, 0, 0, 0, 756, 758, 5, 69, 0, 0, 757, 756, 1, 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 760, 5, 65, 0, 0, 760, 111, 1, 0, 0, 0, 761, 762, 5, 107, 0, 0, 762, 763, 5, 28, 0, 0, 763, 764, 5, 112, 0, 0, 764, 765, 3, 114, 57, 0, 765, 113, 1, 0, 0, 0, 766, 770, 5, 64, 0, 0, 767, 769, 3, 116, 58, 0, 768, 767, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 773, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, 774, 5, 65, 0, 0, 774, 115, 1, 0, 0, 0, 775, 777, 3, 8, 4, 0, 776, 775, 1, 0, 0, 0, 777, 780, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 781, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 781, 784, 3, 118, 59, 0, 782, 784, 5, 68, 0, 0, 783, 778, 1, 0, 0, 0, 783, 782, 1, 0, 0, 0, 784, 117, 1, 0, 0, 0, 785, 786, 3, 198, 99, 0, 786, 787, 3, 120, 60, 0, 787, 788, 5, 68, 0, 0, 788, 806, 1, 0, 0, 0, 789, 791, 3, 14, 7, 0, 790, 792, 5, 68, 0, 0, 791, 790, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 806, 1, 0, 0, 0, 793, 795, 3, 30, 15, 0, 794, 796, 5, 68, 0, 0, 795, 794, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 806, 1, 0, 0, 0, 797, 799, 3, 22, 11, 0, 798, 800, 5, 68, 0, 0, 799, 798, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 806, 1, 0, 0, 0, 801, 803, 3, 112, 56, 0, 802, 804, 5, 68, 0, 0, 803, 802, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 806, 1, 0, 0, 0, 805, 785, 1, 0, 0, 0, 805, 789, 1, 0, 0, 0, 805, 793, 1, 0, 0, 0, 805, 797, 1, 0, 0, 0, 805, 801, 1, 0, 0, 0, 806, 119, 1, 0, 0, 0, 807, 810, 3, 122, 61, 0, 808, 810, 3, 124, 62, 0, 809, 807, 1, 0, 0, 0, 809, 808, 1, 0, 0, 0, 810, 121, 1, 0, 0, 0, 811, 812, 5, 112, 0, 0, 812, 813, 5, 62, 0, 0, 813, 815, 5, 63, 0, 0, 814, 816, 3, 126, 63, 0, 815, 814, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 123, 1, 0, 0, 0, 817, 818, 3, 68, 34, 0, 818, 125, 1, 0, 0, 0, 819, 820, 5, 12, 0, 0, 820, 821, 3, 108, 54, 0, 821, 127, 1, 0, 0, 0, 822, 826, 5, 64, 0, 0, 823, 825, 3, 130, 65, 0, 824, 823, 1, 0, 0, 0, 825, 828, 1, 0, 0, 0, 826, 824, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 829, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 829, 830, 5, 65, 0, 0, 830, 129, 1, 0, 0, 0, 831, 832, 3, 132, 66, 0, 832, 833, 5, 68, 0, 0, 833, 837, 1, 0, 0, 0, 834, 837, 3, 136, 68, 0, 835, 837, 3, 134, 67, 0, 836, 831, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 835, 1, 0, 0, 0, 837, 131, 1, 0, 0, 0, 838, 840, 3, 12, 6, 0, 839, 838, 1, 0, 0, 0, 840, 843, 1, 0, 0, 0, 841, 839, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 844, 1, 0, 0, 0, 843, 841, 1, 0, 0, 0, 844, 845, 3, 198, 99, 0, 845, 846, 3, 68, 34, 0, 846, 133, 1, 0, 0, 0, 847, 849, 3, 10, 5, 0, 848, 847, 1, 0, 0, 0, 849, 852, 1, 0, 0, 0, 850, 848, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 855, 1, 0, 0, 0, 852, 850, 1, 0, 0, 0, 853, 856, 3, 14, 7, 0, 854, 856, 3, 30, 15, 0, 855, 853, 1, 0, 0, 0, 855, 854, 1, 0, 0, 0, 856, 859, 1, 0, 0, 0, 857, 859, 5, 68, 0, 0, 858, 850, 1, 0, 0, 0, 858, 857, 1, 0, 0, 0, 859, 135, 1, 0, 0, 0, 860, 965, 3, 128, 64, 0, 861, 862, 5, 2, 0, 0, 862, 865, 3, 166, 83, 0, 863, 864, 5, 77, 0, 0, 864, 866, 3, 166, 83, 0, 865, 863, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 5, 68, 0, 0, 868, 965, 1, 0, 0, 0, 869, 870, 5, 22, 0, 0, 870, 871, 3, 160, 80, 0, 871, 874, 3, 136, 68, 0, 872, 873, 5, 15, 0, 0, 873, 875, 3, 136, 68, 0, 874, 872, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 965, 1, 0, 0, 0, 876, 877, 5, 21, 0, 0, 877, 878, 5, 62, 0, 0, 878, 879, 3, 154, 77, 0, 879, 880, 5, 63, 0, 0, 880, 881, 3, 136, 68, 0, 881, 965, 1, 0, 0, 0, 882, 883, 5, 51, 0, 0, 883, 884, 3, 160, 80, 0, 884, 885, 3, 136, 68, 0, 885, 965, 1, 0, 0, 0, 886, 887, 5, 13, 0, 0, 887, 888, 3, 136, 68, 0, 888, 889, 5, 51, 0, 0, 889, 890, 3, 160, 80, 0, 890, 891, 5, 68, 0, 0, 891, 965, 1, 0, 0, 0, 892, 893, 5, 47, 0, 0, 893, 903, 3, 128, 64, 0, 894, 896, 3, 138, 69, 0, 895, 894, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 895, 1, 0, 0, 0, 897, 898, 1, 0, 0, 0, 898, 900, 1, 0, 0, 0, 899, 901, 3, 142, 71, 0, 900, 899, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 904, 1, 0, 0, 0, 902, 904, 3, 142, 71, 0, 903, 895, 1, 0, 0, 0, 903, 902, 1, 0, 0, 0, 904, 965, 1, 0, 0, 0, 905, 906, 5, 47, 0, 0, 906, 907, 3, 144, 72, 0, 907, 911, 3, 128, 64, 0, 908, 910, 3, 138, 69, 0, 909, 908, 1, 0, 0, 0, 910, 913, 1, 0, 0, 0, 911, 909, 1, 0, 0, 0, 911, 912, 1, 0, 0, 0, 912, 915, 1, 0, 0, 0, 913, 911, 1, 0, 0, 0, 914, 916, 3, 142, 71, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 965, 1, 0, 0, 0, 917, 918, 5, 41, 0, 0, 918, 919, 3, 160, 80, 0, 919, 923, 5, 64, 0, 0, 920, 922, 3, 150, 75, 0, 921, 920, 1, 0, 0, 0, 922, 925, 1, 0, 0, 0, 923, 921, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 929, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 926, 928, 3, 152, 76, 0, 927, 926, 1, 0, 0, 0, 928, 931, 1, 0, 0, 0, 929, 927, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 932, 1, 0, 0, 0, 931, 929, 1, 0, 0, 0, 932, 933, 5, 65, 0, 0, 933, 965, 1, 0, 0, 0, 934, 935, 5, 42, 0, 0, 935, 936, 3, 160, 80, 0, 936, 937, 3, 128, 64, 0, 937, 965, 1, 0, 0, 0, 938, 940, 5, 36, 0, 0, 939, 941, 3, 166, 83, 0, 940, 939, 1, 0, 0, 0, 940, 941, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 965, 5, 68, 0, 0, 943, 944, 5, 44, 0, 0, 944, 945, 3, 166, 83, 0, 945, 946, 5, 68, 0, 0, 946, 965, 1, 0, 0, 0, 947, 949, 5, 4, 0, 0, 948, 950, 5, 112, 0, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 965, 5, 68, 0, 0, 952, 954, 5, 11, 0, 0, 953, 955, 5, 112, 0, 0, 954, 953, 1, 0, 0, 0, 954, 955, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 965, 5, 68, 0, 0, 957, 965, 5, 68, 0, 0, 958, 959, 3, 166, 83, 0, 959, 960, 5, 68, 0, 0, 960, 965, 1, 0, 0, 0, 961, 962, 5, 112, 0, 0, 962, 963, 5, 77, 0, 0, 963, 965, 3, 136, 68, 0, 964, 860, 1, 0, 0, 0, 964, 861, 1, 0, 0, 0, 964, 869, 1, 0, 0, 0, 964, 876, 1, 0, 0, 0, 964, 882, 1, 0, 0, 0, 964, 886, 1, 0, 0, 0, 964, 892, 1, 0, 0, 0, 964, 905, 1, 0, 0, 0, 964, 917, 1, 0, 0, 0, 964, 934, 1, 0, 0, 0, 964, 938, 1, 0, 0, 0, 964, 943, 1, 0, 0, 0, 964, 947, 1, 0, 0, 0, 964, 952, 1, 0, 0, 0, 964, 957, 1, 0, 0, 0, 964, 958, 1, 0, 0, 0, 964, 961, 1, 0, 0, 0, 965, 137, 1, 0, 0, 0, 966, 967, 5, 7, 0, 0, 967, 971, 5, 62, 0, 0, 968, 970, 3, 12, 6, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 975, 3, 140, 70, 0, 975, 976, 5, 112, 0, 0, 976, 977, 5, 63, 0, 0, 977, 978, 3, 128, 64, 0, 978, 139, 1, 0, 0, 0, 979, 984, 3, 92, 46, 0, 980, 981, 5, 91, 0, 0, 981, 983, 3, 92, 46, 0, 982, 980, 1, 0, 0, 0, 983, 986, 1, 0, 0, 0, 984, 982, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 141, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 987, 988, 5, 19, 0, 0, 988, 989, 3, 128, 64, 0, 989, 143, 1, 0, 0, 0, 990, 991, 5, 62, 0, 0, 991, 993, 3, 146, 73, 0, 992, 994, 5, 68, 0, 0, 993, 992, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 996, 5, 63, 0, 0, 996, 145, 1, 0, 0, 0, 997, 1002, 3, 148, 74, 0, 998, 999, 5, 68, 0, 0, 999, 1001, 3, 148, 74, 0, 1000, 998, 1, 0, 0, 0, 1001, 1004, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 147, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1007, 3, 12, 6, 0, 1006, 1005, 1, 0, 0, 0, 1007, 1010, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1011, 1, 0, 0, 0, 1010, 1008, 1, 0, 0, 0, 1011, 1012, 3, 78, 39, 0, 1012, 1013, 3, 72, 36, 0, 1013, 1014, 5, 71, 0, 0, 1014, 1015, 3, 166, 83, 0, 1015, 149, 1, 0, 0, 0, 1016, 1018, 3, 152, 76, 0, 1017, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1022, 1, 0, 0, 0, 1021, 1023, 3, 130, 65, 0, 1022, 1021, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 151, 1, 0, 0, 0, 1026, 1029, 5, 6, 0, 0, 1027, 1030, 3, 166, 83, 0, 1028, 1030, 5, 112, 0, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1035, 5, 77, 0, 0, 1032, 1033, 5, 12, 0, 0, 1033, 1035, 5, 77, 0, 0, 1034, 1026, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 153, 1, 0, 0, 0, 1036, 1049, 3, 158, 79, 0, 1037, 1039, 3, 156, 78, 0, 1038, 1037, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 1042, 5, 68, 0, 0, 1041, 1043, 3, 166, 83, 0, 1042, 1041, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1046, 5, 68, 0, 0, 1045, 1047, 3, 162, 81, 0, 1046, 1045, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1049, 1, 0, 0, 0, 1048, 1036, 1, 0, 0, 0, 1048, 1038, 1, 0, 0, 0, 1049, 155, 1, 0, 0, 0, 1050, 1053, 3, 132, 66, 0, 1051, 1053, 3, 162, 81, 0, 1052, 1050, 1, 0, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 157, 1, 0, 0, 0, 1054, 1056, 3, 12, 6, 0, 1055, 1054, 1, 0, 0, 0, 1056, 1059, 1, 0, 0, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1061, 3, 198, 99, 0, 1061, 1062, 3, 72, 36, 0, 1062, 1063, 5, 77, 0, 0, 1063, 1064, 3, 166, 83, 0, 1064, 159, 1, 0, 0, 0, 1065, 1066, 5, 62, 0, 0, 1066, 1067, 3, 166, 83, 0, 1067, 1068, 5, 63, 0, 0, 1068, 161, 1, 0, 0, 0, 1069, 1074, 3, 166, 83, 0, 1070, 1071, 5, 69, 0, 0, 1071, 1073, 3, 166, 83, 0, 1072, 1070, 1, 0, 0, 0, 1073, 1076, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 163, 1, 0, 0, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1078, 5, 112, 0, 0, 1078, 1080, 5, 62, 0, 0, 1079, 1081, 3, 162, 81, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1096, 5, 63, 0, 0, 1083, 1084, 5, 43, 0, 0, 1084, 1086, 5, 62, 0, 0, 1085, 1087, 3, 162, 81, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1096, 5, 63, 0, 0, 1089, 1090, 5, 40, 0, 0, 1090, 1092, 5, 62, 0, 0, 1091, 1093, 3, 162, 81, 0, 1092, 1091, 1, 0, 0, 0, 1092, 1093, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1096, 5, 63, 0, 0, 1095, 1077, 1, 0, 0, 0, 1095, 1083, 1, 0, 0, 0, 1095, 1089, 1, 0, 0, 0, 1096, 165, 1, 0, 0, 0, 1097, 1098, 6, 83, -1, 0, 1098, 1142, 3, 174, 87, 0, 1099, 1142, 3, 164, 82, 0, 1100, 1101, 5, 31, 0, 0, 1101, 1142, 3, 178, 89, 0, 1102, 1106, 5, 62, 0, 0, 1103, 1105, 3, 102, 51, 0, 1104, 1103, 1, 0, 0, 0, 1105, 1108, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1109, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1109, 1114, 3, 198, 99, 0, 1110, 1111, 5, 90, 0, 0, 1111, 1113, 3, 198, 99, 0, 1112, 1110, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 5, 63, 0, 0, 1118, 1119, 3, 166, 83, 21, 1119, 1142, 1, 0, 0, 0, 1120, 1121, 7, 3, 0, 0, 1121, 1142, 3, 166, 83, 19, 1122, 1123, 7, 4, 0, 0, 1123, 1142, 3, 166, 83, 18, 1124, 1142, 3, 168, 84, 0, 1125, 1126, 3, 198, 99, 0, 1126, 1132, 5, 106, 0, 0, 1127, 1129, 3, 202, 101, 0, 1128, 1127, 1, 0, 0, 0, 1128, 1129, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1133, 5, 112, 0, 0, 1131, 1133, 5, 31, 0, 0, 1132, 1128, 1, 0, 0, 0, 1132, 1131, 1, 0, 0, 0, 1133, 1142, 1, 0, 0, 0, 1134, 1135, 3, 176, 88, 0, 1135, 1137, 5, 106, 0, 0, 1136, 1138, 3, 202, 101, 0, 1137, 1136, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1139, 1, 0, 0, 0, 1139, 1140, 5, 31, 0, 0, 1140, 1142, 1, 0, 0, 0, 1141, 1097, 1, 0, 0, 0, 1141, 1099, 1, 0, 0, 0, 1141, 1100, 1, 0, 0, 0, 1141, 1102, 1, 0, 0, 0, 1141, 1120, 1, 0, 0, 0, 1141, 1122, 1, 0, 0, 0, 1141, 1124, 1, 0, 0, 0, 1141, 1125, 1, 0, 0, 0, 1141, 1134, 1, 0, 0, 0, 1142, 1223, 1, 0, 0, 0, 1143, 1144, 10, 17, 0, 0, 1144, 1145, 7, 5, 0, 0, 1145, 1222, 3, 166, 83, 18, 1146, 1147, 10, 16, 0, 0, 1147, 1148, 7, 6, 0, 0, 1148, 1222, 3, 166, 83, 17, 1149, 1157, 10, 15, 0, 0, 1150, 1151, 5, 73, 0, 0, 1151, 1158, 5, 73, 0, 0, 1152, 1153, 5, 72, 0, 0, 1153, 1154, 5, 72, 0, 0, 1154, 1158, 5, 72, 0, 0, 1155, 1156, 5, 72, 0, 0, 1156, 1158, 5, 72, 0, 0, 1157, 1150, 1, 0, 0, 0, 1157, 1152, 1, 0, 0, 0, 1157, 1155, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1222, 3, 166, 83, 16, 1160, 1161, 10, 14, 0, 0, 1161, 1162, 7, 7, 0, 0, 1162, 1222, 3, 166, 83, 15, 1163, 1164, 10, 12, 0, 0, 1164, 1165, 7, 8, 0, 0, 1165, 1222, 3, 166, 83, 13, 1166, 1167, 10, 11, 0, 0, 1167, 1168, 5, 90, 0, 0, 1168, 1222, 3, 166, 83, 12, 1169, 1170, 10, 10, 0, 0, 1170, 1171, 5, 92, 0, 0, 1171, 1222, 3, 166, 83, 11, 1172, 1173, 10, 9, 0, 0, 1173, 1174, 5, 91, 0, 0, 1174, 1222, 3, 166, 83, 10, 1175, 1176, 10, 8, 0, 0, 1176, 1177, 5, 82, 0, 0, 1177, 1222, 3, 166, 83, 9, 1178, 1179, 10, 7, 0, 0, 1179, 1180, 5, 83, 0, 0, 1180, 1222, 3, 166, 83, 8, 1181, 1182, 10, 6, 0, 0, 1182, 1183, 5, 76, 0, 0, 1183, 1184, 3, 166, 83, 0, 1184, 1185, 5, 77, 0, 0, 1185, 1186, 3, 166, 83, 6, 1186, 1222, 1, 0, 0, 0, 1187, 1188, 10, 5, 0, 0, 1188, 1189, 7, 9, 0, 0, 1189, 1222, 3, 166, 83, 5, 1190, 1191, 10, 25, 0, 0, 1191, 1203, 5, 70, 0, 0, 1192, 1204, 5, 112, 0, 0, 1193, 1204, 3, 164, 82, 0, 1194, 1204, 5, 43, 0, 0, 1195, 1197, 5, 31, 0, 0, 1196, 1198, 3, 194, 97, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1204, 3, 182, 91, 0, 1200, 1201, 5, 40, 0, 0, 1201, 1204, 3, 204, 102, 0, 1202, 1204, 3, 188, 94, 0, 1203, 1192, 1, 0, 0, 0, 1203, 1193, 1, 0, 0, 0, 1203, 1194, 1, 0, 0, 0, 1203, 1195, 1, 0, 0, 0, 1203, 1200, 1, 0, 0, 0, 1203, 1202, 1, 0, 0, 0, 1204, 1222, 1, 0, 0, 0, 1205, 1206, 10, 24, 0, 0, 1206, 1207, 5, 66, 0, 0, 1207, 1208, 3, 166, 83, 0, 1208, 1209, 5, 67, 0, 0, 1209, 1222, 1, 0, 0, 0, 1210, 1211, 10, 20, 0, 0, 1211, 1222, 7, 10, 0, 0, 1212, 1213, 10, 13, 0, 0, 1213, 1214, 5, 26, 0, 0, 1214, 1222, 3, 198, 99, 0, 1215, 1216, 10, 3, 0, 0, 1216, 1218, 5, 106, 0, 0, 1217, 1219, 3, 202, 101, 0, 1218, 1217, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1222, 5, 112, 0, 0, 1221, 1143, 1, 0, 0, 0, 1221, 1146, 1, 0, 0, 0, 1221, 1149, 1, 0, 0, 0, 1221, 1160, 1, 0, 0, 0, 1221, 1163, 1, 0, 0, 0, 1221, 1166, 1, 0, 0, 0, 1221, 1169, 1, 0, 0, 0, 1221, 1172, 1, 0, 0, 0, 1221, 1175, 1, 0, 0, 0, 1221, 1178, 1, 0, 0, 0, 1221, 1181, 1, 0, 0, 0, 1221, 1187, 1, 0, 0, 0, 1221, 1190, 1, 0, 0, 0, 1221, 1205, 1, 0, 0, 0, 1221, 1210, 1, 0, 0, 0, 1221, 1212, 1, 0, 0, 0, 1221, 1215, 1, 0, 0, 0, 1222, 1225, 1, 0, 0, 0, 1223, 1221, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 167, 1, 0, 0, 0, 1225, 1223, 1, 0, 0, 0, 1226, 1227, 3, 170, 85, 0, 1227, 1228, 5, 105, 0, 0, 1228, 1229, 3, 172, 86, 0, 1229, 169, 1, 0, 0, 0, 1230, 1247, 5, 112, 0, 0, 1231, 1233, 5, 62, 0, 0, 1232, 1234, 3, 86, 43, 0, 1233, 1232, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1247, 5, 63, 0, 0, 1236, 1237, 5, 62, 0, 0, 1237, 1242, 5, 112, 0, 0, 1238, 1239, 5, 69, 0, 0, 1239, 1241, 5, 112, 0, 0, 1240, 1238, 1, 0, 0, 0, 1241, 1244, 1, 0, 0, 0, 1242, 1240, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1245, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1245, 1247, 5, 63, 0, 0, 1246, 1230, 1, 0, 0, 0, 1246, 1231, 1, 0, 0, 0, 1246, 1236, 1, 0, 0, 0, 1247, 171, 1, 0, 0, 0, 1248, 1251, 3, 166, 83, 0, 1249, 1251, 3, 128, 64, 0, 1250, 1248, 1, 0, 0, 0, 1250, 1249, 1, 0, 0, 0, 1251, 173, 1, 0, 0, 0, 1252, 1253, 5, 62, 0, 0, 1253, 1254, 3, 166, 83, 0, 1254, 1255, 5, 63, 0, 0, 1255, 1271, 1, 0, 0, 0, 1256, 1271, 5, 43, 0, 0, 1257, 1271, 5, 40, 0, 0, 1258, 1271, 3, 94, 47, 0, 1259, 1271, 5, 112, 0, 0, 1260, 1261, 3, 44, 22, 0, 1261, 1262, 5, 70, 0, 0, 1262, 1263, 5, 9, 0, 0, 1263, 1271, 1, 0, 0, 0, 1264, 1268, 3, 194, 97, 0, 1265, 1269, 3, 206, 103, 0, 1266, 1267, 5, 43, 0, 0, 1267, 1269, 3, 208, 104, 0, 1268, 1265, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1269, 1271, 1, 0, 0, 0, 1270, 1252, 1, 0, 0, 0, 1270, 1256, 1, 0, 0, 0, 1270, 1257, 1, 0, 0, 0, 1270, 1258, 1, 0, 0, 0, 1270, 1259, 1, 0, 0, 0, 1270, 1260, 1, 0, 0, 0, 1270, 1264, 1, 0, 0, 0, 1271, 175, 1, 0, 0, 0, 1272, 1273, 3, 78, 39, 0, 1273, 1274, 5, 70, 0, 0, 1274, 1276, 1, 0, 0, 0, 1275, 1272, 1, 0, 0, 0, 1275, 1276, 1, 0, 0, 0, 1276, 1280, 1, 0, 0, 0, 1277, 1279, 3, 102, 51, 0, 1278, 1277, 1, 0, 0, 0, 1279, 1282, 1, 0, 0, 0, 1280, 1278, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1283, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1283, 1285, 5, 112, 0, 0, 1284, 1286, 3, 202, 101, 0, 1285, 1284, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 177, 1, 0, 0, 0, 1287, 1288, 3, 194, 97, 0, 1288, 1289, 3, 180, 90, 0, 1289, 1290, 3, 186, 93, 0, 1290, 1297, 1, 0, 0, 0, 1291, 1294, 3, 180, 90, 0, 1292, 1295, 3, 184, 92, 0, 1293, 1295, 3, 186, 93, 0, 1294, 1292, 1, 0, 0, 0, 1294, 1293, 1, 0, 0, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1287, 1, 0, 0, 0, 1296, 1291, 1, 0, 0, 0, 1297, 179, 1, 0, 0, 0, 1298, 1300, 5, 112, 0, 0, 1299, 1301, 3, 190, 95, 0, 1300, 1299, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1309, 1, 0, 0, 0, 1302, 1303, 5, 70, 0, 0, 1303, 1305, 5, 112, 0, 0, 1304, 1306, 3, 190, 95, 0, 1305, 1304, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1308, 1, 0, 0, 0, 1307, 1302, 1, 0, 0, 0, 1308, 1311, 1, 0, 0, 0, 1309, 1307, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1314, 1, 0, 0, 0, 1311, 1309, 1, 0, 0, 0, 1312, 1314, 3, 200, 100, 0, 1313, 1298, 1, 0, 0, 0, 1313, 1312, 1, 0, 0, 0, 1314, 181, 1, 0, 0, 0, 1315, 1317, 5, 112, 0, 0, 1316, 1318, 3, 192, 96, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 3, 186, 93, 0, 1320, 183, 1, 0, 0, 0, 1321, 1349, 5, 66, 0, 0, 1322, 1327, 5, 67, 0, 0, 1323, 1324, 5, 66, 0, 0, 1324, 1326, 5, 67, 0, 0, 1325, 1323, 1, 0, 0, 0, 1326, 1329, 1, 0, 0, 0, 1327, 1325, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1330, 1, 0, 0, 0, 1329, 1327, 1, 0, 0, 0, 1330, 1350, 3, 76, 38, 0, 1331, 1332, 3, 166, 83, 0, 1332, 1339, 5, 67, 0, 0, 1333, 1334, 5, 66, 0, 0, 1334, 1335, 3, 166, 83, 0, 1335, 1336, 5, 67, 0, 0, 1336, 1338, 1, 0, 0, 0, 1337, 1333, 1, 0, 0, 0, 1338, 1341, 1, 0, 0, 0, 1339, 1337, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1346, 1, 0, 0, 0, 1341, 1339, 1, 0, 0, 0, 1342, 1343, 5, 66, 0, 0, 1343, 1345, 5, 67, 0, 0, 1344, 1342, 1, 0, 0, 0, 1345, 1348, 1, 0, 0, 0, 1346, 1344, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1350, 1, 0, 0, 0, 1348, 1346, 1, 0, 0, 0, 1349, 1322, 1, 0, 0, 0, 1349, 1331, 1, 0, 0, 0, 1350, 185, 1, 0, 0, 0, 1351, 1353, 3, 208, 104, 0, 1352, 1354, 3, 32, 16, 0, 1353, 1352, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 187, 1, 0, 0, 0, 1355, 1356, 3, 194, 97, 0, 1356, 1357, 3, 206, 103, 0, 1357, 189, 1, 0, 0, 0, 1358, 1359, 5, 73, 0, 0, 1359, 1362, 5, 72, 0, 0, 1360, 1362, 3, 202, 101, 0, 1361, 1358, 1, 0, 0, 0, 1361, 1360, 1, 0, 0, 0, 1362, 191, 1, 0, 0, 0, 1363, 1364, 5, 73, 0, 0, 1364, 1367, 5, 72, 0, 0, 1365, 1367, 3, 194, 97, 0, 1366, 1363, 1, 0, 0, 0, 1366, 1365, 1, 0, 0, 0, 1367, 193, 1, 0, 0, 0, 1368, 1369, 5, 73, 0, 0, 1369, 1370, 3, 196, 98, 0, 1370, 1371, 5, 72, 0, 0, 1371, 195, 1, 0, 0, 0, 1372, 1377, 3, 198, 99, 0, 1373, 1374, 5, 69, 0, 0, 1374, 1376, 3, 198, 99, 0, 1375, 1373, 1, 0, 0, 0, 1376, 1379, 1, 0, 0, 0, 1377, 1375, 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 197, 1, 0, 0, 0, 1379, 1377, 1, 0, 0, 0, 1380, 1382, 3, 102, 51, 0, 1381, 1380, 1, 0, 0, 0, 1382, 1385, 1, 0, 0, 0, 1383, 1381, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1388, 1, 0, 0, 0, 1385, 1383, 1, 0, 0, 0, 1386, 1389, 3, 78, 39, 0, 1387, 1389, 3, 200, 100, 0, 1388, 1386, 1, 0, 0, 0, 1388, 1387, 1, 0, 0, 0, 1389, 1400, 1, 0, 0, 0, 1390, 1392, 3, 102, 51, 0, 1391, 1390, 1, 0, 0, 0, 1392, 1395, 1, 0, 0, 0, 1393, 1391, 1, 0, 0, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1396, 1, 0, 0, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1397, 5, 66, 0, 0, 1397, 1399, 5, 67, 0, 0, 1398, 1393, 1, 0, 0, 0, 1399, 1402, 1, 0, 0, 0, 1400, 1398, 1, 0, 0, 0, 1400, 1401, 1, 0, 0, 0, 1401, 199, 1, 0, 0, 0, 1402, 1400, 1, 0, 0, 0, 1403, 1404, 7, 11, 0, 0, 1404, 201, 1, 0, 0, 0, 1405, 1406, 5, 73, 0, 0, 1406, 1411, 3, 80, 40, 0, 1407, 1408, 5, 69, 0, 0, 1408, 1410, 3, 80, 40, 0, 1409, 1407, 1, 0, 0, 0, 1410, 1413, 1, 0, 0, 0, 1411, 1409, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1414, 1, 0, 0, 0, 1413, 1411, 1, 0, 0, 0, 1414, 1415, 5, 72, 0, 0, 1415, 203, 1, 0, 0, 0, 1416, 1423, 3, 208, 104, 0, 1417, 1418, 5, 70, 0, 0, 1418, 1420, 5, 112, 0, 0, 1419, 1421, 3, 208, 104, 0, 1420, 1419, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1423, 1, 0, 0, 0, 1422, 1416, 1, 0, 0, 0, 1422, 1417, 1, 0, 0, 0, 1423, 205, 1, 0, 0, 0, 1424, 1425, 5, 40, 0, 0, 1425, 1429, 3, 204, 102, 0, 1426, 1427, 5, 112, 0, 0, 1427, 1429, 3, 208, 104, 0, 1428, 1424, 1, 0, 0, 0, 1428, 1426, 1, 0, 0, 0, 1429, 207, 1, 0, 0, 0, 1430, 1432, 5, 62, 0, 0, 1431, 1433, 3, 162, 81, 0, 1432, 1431, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1434, 1, 0, 0, 0, 1434, 1435, 5, 63, 0, 0, 1435, 209, 1, 0, 0, 0, 179, 211, 216, 222, 230, 239, 244, 251, 258, 261, 268, 278, 282, 287, 291, 295, 305, 313, 321, 325, 332, 339, 343, 346, 349, 358, 364, 369, 372, 378, 384, 388, 396, 405, 412, 418, 422, 433, 442, 447, 453, 457, 469, 480, 485, 494, 502, 512, 521, 529, 534, 542, 547, 557, 567, 573, 580, 585, 593, 597, 599, 605, 610, 614, 621, 627, 629, 636, 641, 650, 655, 658, 663, 672, 679, 690, 699, 709, 718, 723, 726, 733, 743, 751, 754, 757, 770, 778, 783, 791, 795, 799, 803, 805, 809, 815, 826, 836, 841, 850, 855, 858, 865, 874, 897, 900, 903, 911, 915, 923, 929, 940, 949, 954, 964, 971, 984, 993, 1002, 1008, 1019, 1024, 1029, 1034, 1038, 1042, 1046, 1048, 1052, 1057, 1074, 1080, 1086, 1092, 1095, 1106, 1114, 1128, 1132, 1137, 1141, 1157, 1197, 1203, 1218, 1221, 1223, 1233, 1242, 1246, 1250, 1268, 1270, 1275, 1280, 1285, 1294, 1296, 1300, 1305, 1309, 1313, 1317, 1327, 1339, 1346, 1349, 1353, 1361, 1366, 1377, 1383, 1388, 1393, 1400, 1411, 1420, 1422, 1428, 1432]
\ No newline at end of file
diff --git a/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaParser.java b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaParser.java
new file mode 100644
index 000000000..107415e7b
--- /dev/null
+++ b/lexers/src/main/gen/com/itsaky/androidide/lexers/java/JavaParser.java
@@ -0,0 +1,10589 @@
+// Generated from /home/itsaky/Projects/Android/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/java/JavaParser.g4 by ANTLR 4.10.1
+package com.itsaky.androidide.lexers.java;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class JavaParser extends Parser {
+ static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); }
+
+ protected static final DFA[] _decisionToDFA;
+ protected static final PredictionContextCache _sharedContextCache =
+ new PredictionContextCache();
+ public static final int
+ ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8,
+ CLASS=9, CONST=10, CONTINUE=11, DEFAULT=12, DO=13, DOUBLE=14, ELSE=15,
+ ENUM=16, EXTENDS=17, FINAL=18, FINALLY=19, FLOAT=20, FOR=21, IF=22, GOTO=23,
+ IMPLEMENTS=24, IMPORT=25, INSTANCEOF=26, INT=27, INTERFACE=28, LONG=29,
+ NATIVE=30, NEW=31, PACKAGE=32, PRIVATE=33, PROTECTED=34, PUBLIC=35, RETURN=36,
+ SHORT=37, STATIC=38, STRICTFP=39, SUPER=40, SWITCH=41, SYNCHRONIZED=42,
+ THIS=43, THROW=44, THROWS=45, TRANSIENT=46, TRY=47, VAR=48, VOID=49, VOLATILE=50,
+ WHILE=51, DECIMAL_LITERAL=52, HEX_LITERAL=53, OCT_LITERAL=54, BINARY_LITERAL=55,
+ FLOAT_LITERAL=56, HEX_FLOAT_LITERAL=57, BOOL_LITERAL=58, CHAR_LITERAL=59,
+ STRING_LITERAL=60, NULL_LITERAL=61, LPAREN=62, RPAREN=63, LBRACE=64, RBRACE=65,
+ LBRACK=66, RBRACK=67, SEMI=68, COMMA=69, DOT=70, ASSIGN=71, GT=72, LT=73,
+ BANG=74, TILDE=75, QUESTION=76, COLON=77, EQUAL=78, LE=79, GE=80, NOTEQUAL=81,
+ AND=82, OR=83, INC=84, DEC=85, ADD=86, SUB=87, MUL=88, DIV=89, BITAND=90,
+ BITOR=91, CARET=92, MOD=93, ADD_ASSIGN=94, SUB_ASSIGN=95, MUL_ASSIGN=96,
+ DIV_ASSIGN=97, AND_ASSIGN=98, OR_ASSIGN=99, XOR_ASSIGN=100, MOD_ASSIGN=101,
+ LSHIFT_ASSIGN=102, RSHIFT_ASSIGN=103, URSHIFT_ASSIGN=104, ARROW=105, COLONCOLON=106,
+ AT=107, ELLIPSIS=108, WS=109, BLOCK_COMMENT=110, LINE_COMMENT=111, IDENTIFIER=112;
+ public static final int
+ RULE_compilationUnit = 0, RULE_packageDeclaration = 1, RULE_importDeclaration = 2,
+ RULE_typeDeclaration = 3, RULE_modifier = 4, RULE_classOrInterfaceModifier = 5,
+ RULE_variableModifier = 6, RULE_classDeclaration = 7, RULE_typeParameters = 8,
+ RULE_typeParameter = 9, RULE_typeBound = 10, RULE_enumDeclaration = 11,
+ RULE_enumConstants = 12, RULE_enumConstant = 13, RULE_enumBodyDeclarations = 14,
+ RULE_interfaceDeclaration = 15, RULE_classBody = 16, RULE_interfaceBody = 17,
+ RULE_classBodyDeclaration = 18, RULE_memberDeclaration = 19, RULE_methodDeclaration = 20,
+ RULE_methodBody = 21, RULE_typeTypeOrVoid = 22, RULE_genericMethodDeclaration = 23,
+ RULE_genericConstructorDeclaration = 24, RULE_constructorDeclaration = 25,
+ RULE_fieldDeclaration = 26, RULE_interfaceBodyDeclaration = 27, RULE_interfaceMemberDeclaration = 28,
+ RULE_constDeclaration = 29, RULE_constantDeclarator = 30, RULE_interfaceMethodDeclaration = 31,
+ RULE_interfaceMethodModifier = 32, RULE_genericInterfaceMethodDeclaration = 33,
+ RULE_variableDeclarators = 34, RULE_variableDeclarator = 35, RULE_variableDeclaratorId = 36,
+ RULE_variableInitializer = 37, RULE_arrayInitializer = 38, RULE_classOrInterfaceType = 39,
+ RULE_typeArgument = 40, RULE_qualifiedNameList = 41, RULE_formalParameters = 42,
+ RULE_formalParameterList = 43, RULE_formalParameter = 44, RULE_lastFormalParameter = 45,
+ RULE_qualifiedName = 46, RULE_literal = 47, RULE_integerLiteral = 48,
+ RULE_floatLiteral = 49, RULE_altAnnotationQualifiedName = 50, RULE_annotation = 51,
+ RULE_elementValuePairs = 52, RULE_elementValuePair = 53, RULE_elementValue = 54,
+ RULE_elementValueArrayInitializer = 55, RULE_annotationTypeDeclaration = 56,
+ RULE_annotationTypeBody = 57, RULE_annotationTypeElementDeclaration = 58,
+ RULE_annotationTypeElementRest = 59, RULE_annotationMethodOrConstantRest = 60,
+ RULE_annotationMethodRest = 61, RULE_annotationConstantRest = 62, RULE_defaultValue = 63,
+ RULE_block = 64, RULE_blockStatement = 65, RULE_localVariableDeclaration = 66,
+ RULE_localTypeDeclaration = 67, RULE_statement = 68, RULE_catchClause = 69,
+ RULE_catchType = 70, RULE_finallyBlock = 71, RULE_resourceSpecification = 72,
+ RULE_resources = 73, RULE_resource = 74, RULE_switchBlockStatementGroup = 75,
+ RULE_switchLabel = 76, RULE_forControl = 77, RULE_forInit = 78, RULE_enhancedForControl = 79,
+ RULE_parExpression = 80, RULE_expressionList = 81, RULE_methodCall = 82,
+ RULE_expression = 83, RULE_lambdaExpression = 84, RULE_lambdaParameters = 85,
+ RULE_lambdaBody = 86, RULE_primary = 87, RULE_classType = 88, RULE_creator = 89,
+ RULE_createdName = 90, RULE_innerCreator = 91, RULE_arrayCreatorRest = 92,
+ RULE_classCreatorRest = 93, RULE_explicitGenericInvocation = 94, RULE_typeArgumentsOrDiamond = 95,
+ RULE_nonWildcardTypeArgumentsOrDiamond = 96, RULE_nonWildcardTypeArguments = 97,
+ RULE_typeList = 98, RULE_typeType = 99, RULE_primitiveType = 100, RULE_typeArguments = 101,
+ RULE_superSuffix = 102, RULE_explicitGenericInvocationSuffix = 103, RULE_arguments = 104;
+ private static String[] makeRuleNames() {
+ return new String[] {
+ "compilationUnit", "packageDeclaration", "importDeclaration", "typeDeclaration",
+ "modifier", "classOrInterfaceModifier", "variableModifier", "classDeclaration",
+ "typeParameters", "typeParameter", "typeBound", "enumDeclaration", "enumConstants",
+ "enumConstant", "enumBodyDeclarations", "interfaceDeclaration", "classBody",
+ "interfaceBody", "classBodyDeclaration", "memberDeclaration", "methodDeclaration",
+ "methodBody", "typeTypeOrVoid", "genericMethodDeclaration", "genericConstructorDeclaration",
+ "constructorDeclaration", "fieldDeclaration", "interfaceBodyDeclaration",
+ "interfaceMemberDeclaration", "constDeclaration", "constantDeclarator",
+ "interfaceMethodDeclaration", "interfaceMethodModifier", "genericInterfaceMethodDeclaration",
+ "variableDeclarators", "variableDeclarator", "variableDeclaratorId",
+ "variableInitializer", "arrayInitializer", "classOrInterfaceType", "typeArgument",
+ "qualifiedNameList", "formalParameters", "formalParameterList", "formalParameter",
+ "lastFormalParameter", "qualifiedName", "literal", "integerLiteral",
+ "floatLiteral", "altAnnotationQualifiedName", "annotation", "elementValuePairs",
+ "elementValuePair", "elementValue", "elementValueArrayInitializer", "annotationTypeDeclaration",
+ "annotationTypeBody", "annotationTypeElementDeclaration", "annotationTypeElementRest",
+ "annotationMethodOrConstantRest", "annotationMethodRest", "annotationConstantRest",
+ "defaultValue", "block", "blockStatement", "localVariableDeclaration",
+ "localTypeDeclaration", "statement", "catchClause", "catchType", "finallyBlock",
+ "resourceSpecification", "resources", "resource", "switchBlockStatementGroup",
+ "switchLabel", "forControl", "forInit", "enhancedForControl", "parExpression",
+ "expressionList", "methodCall", "expression", "lambdaExpression", "lambdaParameters",
+ "lambdaBody", "primary", "classType", "creator", "createdName", "innerCreator",
+ "arrayCreatorRest", "classCreatorRest", "explicitGenericInvocation",
+ "typeArgumentsOrDiamond", "nonWildcardTypeArgumentsOrDiamond", "nonWildcardTypeArguments",
+ "typeList", "typeType", "primitiveType", "typeArguments", "superSuffix",
+ "explicitGenericInvocationSuffix", "arguments"
+ };
+ }
+ public static final String[] ruleNames = makeRuleNames();
+
+ private static String[] makeLiteralNames() {
+ return new String[] {
+ null, "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'",
+ "'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'",
+ "'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", "'finally'",
+ "'float'", "'for'", "'if'", "'goto'", "'implements'", "'import'", "'instanceof'",
+ "'int'", "'interface'", "'long'", "'native'", "'new'", "'package'", "'private'",
+ "'protected'", "'public'", "'return'", "'short'", "'static'", "'strictfp'",
+ "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", "'throws'",
+ "'transient'", "'try'", "'var'", "'void'", "'volatile'", "'while'", null,
+ null, null, null, null, null, null, null, null, "'null'", "'('", "')'",
+ "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", "'='", "'>'", "'<'",
+ "'!'", "'~'", "'?'", "':'", "'=='", "'<='", "'>='", "'!='", "'&&'", "'||'",
+ "'++'", "'--'", "'+'", "'-'", "'*'", "'/'", "'&'", "'|'", "'^'", "'%'",
+ "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'<<='",
+ "'>>='", "'>>>='", "'->'", "'::'", "'@'", "'...'"
+ };
+ }
+ private static final String[] _LITERAL_NAMES = makeLiteralNames();
+ private static String[] makeSymbolicNames() {
+ return new String[] {
+ null, "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH",
+ "CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE",
+ "ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO",
+ "IMPLEMENTS", "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE",
+ "NEW", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT",
+ "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW",
+ "THROWS", "TRANSIENT", "TRY", "VAR", "VOID", "VOLATILE", "WHILE", "DECIMAL_LITERAL",
+ "HEX_LITERAL", "OCT_LITERAL", "BINARY_LITERAL", "FLOAT_LITERAL", "HEX_FLOAT_LITERAL",
+ "BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "NULL_LITERAL", "LPAREN",
+ "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT",
+ "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", "EQUAL",
+ "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL",
+ "DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
+ "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
+ "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
+ "COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "LINE_COMMENT",
+ "IDENTIFIER"
+ };
+ }
+ private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+ public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+ /**
+ * @deprecated Use {@link #VOCABULARY} instead.
+ */
+ @Deprecated
+ public static final String[] tokenNames;
+ static {
+ tokenNames = new String[_SYMBOLIC_NAMES.length];
+ for (int i = 0; i < tokenNames.length; i++) {
+ tokenNames[i] = VOCABULARY.getLiteralName(i);
+ if (tokenNames[i] == null) {
+ tokenNames[i] = VOCABULARY.getSymbolicName(i);
+ }
+
+ if (tokenNames[i] == null) {
+ tokenNames[i] = "";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+ @Override
+ public String getGrammarFileName() { return "JavaParser.g4"; }
+
+ @Override
+ public String[] getRuleNames() { return ruleNames; }
+
+ @Override
+ public String getSerializedATN() { return _serializedATN; }
+
+ @Override
+ public ATN getATN() { return _ATN; }
+
+ public JavaParser(TokenStream input) {
+ super(input);
+ _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+
+ public static class CompilationUnitContext extends ParserRuleContext {
+ public TerminalNode EOF() { return getToken(JavaParser.EOF, 0); }
+ public PackageDeclarationContext packageDeclaration() {
+ return getRuleContext(PackageDeclarationContext.class,0);
+ }
+ public List importDeclaration() {
+ return getRuleContexts(ImportDeclarationContext.class);
+ }
+ public ImportDeclarationContext importDeclaration(int i) {
+ return getRuleContext(ImportDeclarationContext.class,i);
+ }
+ public List typeDeclaration() {
+ return getRuleContexts(TypeDeclarationContext.class);
+ }
+ public TypeDeclarationContext typeDeclaration(int i) {
+ return getRuleContext(TypeDeclarationContext.class,i);
+ }
+ public CompilationUnitContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_compilationUnit; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterCompilationUnit(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitCompilationUnit(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitCompilationUnit(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final CompilationUnitContext compilationUnit() throws RecognitionException {
+ CompilationUnitContext _localctx = new CompilationUnitContext(_ctx, getState());
+ enterRule(_localctx, 0, RULE_compilationUnit);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(211);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) {
+ case 1:
+ {
+ setState(210);
+ packageDeclaration();
+ }
+ break;
+ }
+ setState(216);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==IMPORT) {
+ {
+ {
+ setState(213);
+ importDeclaration();
+ }
+ }
+ setState(218);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(222);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << CLASS) | (1L << ENUM) | (1L << FINAL) | (1L << INTERFACE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (SEMI - 68)) | (1L << (AT - 68)) | (1L << (IDENTIFIER - 68)))) != 0)) {
+ {
+ {
+ setState(219);
+ typeDeclaration();
+ }
+ }
+ setState(224);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(225);
+ match(EOF);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class PackageDeclarationContext extends ParserRuleContext {
+ public TerminalNode PACKAGE() { return getToken(JavaParser.PACKAGE, 0); }
+ public QualifiedNameContext qualifiedName() {
+ return getRuleContext(QualifiedNameContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public PackageDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_packageDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterPackageDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitPackageDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitPackageDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final PackageDeclarationContext packageDeclaration() throws RecognitionException {
+ PackageDeclarationContext _localctx = new PackageDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_packageDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(230);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==AT || _la==IDENTIFIER) {
+ {
+ {
+ setState(227);
+ annotation();
+ }
+ }
+ setState(232);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(233);
+ match(PACKAGE);
+ setState(234);
+ qualifiedName();
+ setState(235);
+ match(SEMI);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ImportDeclarationContext extends ParserRuleContext {
+ public TerminalNode IMPORT() { return getToken(JavaParser.IMPORT, 0); }
+ public QualifiedNameContext qualifiedName() {
+ return getRuleContext(QualifiedNameContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public TerminalNode STATIC() { return getToken(JavaParser.STATIC, 0); }
+ public TerminalNode DOT() { return getToken(JavaParser.DOT, 0); }
+ public TerminalNode MUL() { return getToken(JavaParser.MUL, 0); }
+ public ImportDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_importDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterImportDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitImportDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitImportDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ImportDeclarationContext importDeclaration() throws RecognitionException {
+ ImportDeclarationContext _localctx = new ImportDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_importDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(237);
+ match(IMPORT);
+ setState(239);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==STATIC) {
+ {
+ setState(238);
+ match(STATIC);
+ }
+ }
+
+ setState(241);
+ qualifiedName();
+ setState(244);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==DOT) {
+ {
+ setState(242);
+ match(DOT);
+ setState(243);
+ match(MUL);
+ }
+ }
+
+ setState(246);
+ match(SEMI);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeDeclarationContext extends ParserRuleContext {
+ public ClassDeclarationContext classDeclaration() {
+ return getRuleContext(ClassDeclarationContext.class,0);
+ }
+ public EnumDeclarationContext enumDeclaration() {
+ return getRuleContext(EnumDeclarationContext.class,0);
+ }
+ public InterfaceDeclarationContext interfaceDeclaration() {
+ return getRuleContext(InterfaceDeclarationContext.class,0);
+ }
+ public AnnotationTypeDeclarationContext annotationTypeDeclaration() {
+ return getRuleContext(AnnotationTypeDeclarationContext.class,0);
+ }
+ public List classOrInterfaceModifier() {
+ return getRuleContexts(ClassOrInterfaceModifierContext.class);
+ }
+ public ClassOrInterfaceModifierContext classOrInterfaceModifier(int i) {
+ return getRuleContext(ClassOrInterfaceModifierContext.class,i);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public TypeDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeDeclarationContext typeDeclaration() throws RecognitionException {
+ TypeDeclarationContext _localctx = new TypeDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 6, RULE_typeDeclaration);
+ try {
+ int _alt;
+ setState(261);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case ABSTRACT:
+ case CLASS:
+ case ENUM:
+ case FINAL:
+ case INTERFACE:
+ case PRIVATE:
+ case PROTECTED:
+ case PUBLIC:
+ case STATIC:
+ case STRICTFP:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(251);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,6,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(248);
+ classOrInterfaceModifier();
+ }
+ }
+ }
+ setState(253);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,6,_ctx);
+ }
+ setState(258);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case CLASS:
+ {
+ setState(254);
+ classDeclaration();
+ }
+ break;
+ case ENUM:
+ {
+ setState(255);
+ enumDeclaration();
+ }
+ break;
+ case INTERFACE:
+ {
+ setState(256);
+ interfaceDeclaration();
+ }
+ break;
+ case AT:
+ {
+ setState(257);
+ annotationTypeDeclaration();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ break;
+ case SEMI:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(260);
+ match(SEMI);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ModifierContext extends ParserRuleContext {
+ public ClassOrInterfaceModifierContext classOrInterfaceModifier() {
+ return getRuleContext(ClassOrInterfaceModifierContext.class,0);
+ }
+ public TerminalNode NATIVE() { return getToken(JavaParser.NATIVE, 0); }
+ public TerminalNode SYNCHRONIZED() { return getToken(JavaParser.SYNCHRONIZED, 0); }
+ public TerminalNode TRANSIENT() { return getToken(JavaParser.TRANSIENT, 0); }
+ public TerminalNode VOLATILE() { return getToken(JavaParser.VOLATILE, 0); }
+ public ModifierContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_modifier; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterModifier(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitModifier(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitModifier(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ModifierContext modifier() throws RecognitionException {
+ ModifierContext _localctx = new ModifierContext(_ctx, getState());
+ enterRule(_localctx, 8, RULE_modifier);
+ try {
+ setState(268);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case ABSTRACT:
+ case FINAL:
+ case PRIVATE:
+ case PROTECTED:
+ case PUBLIC:
+ case STATIC:
+ case STRICTFP:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(263);
+ classOrInterfaceModifier();
+ }
+ break;
+ case NATIVE:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(264);
+ match(NATIVE);
+ }
+ break;
+ case SYNCHRONIZED:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(265);
+ match(SYNCHRONIZED);
+ }
+ break;
+ case TRANSIENT:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(266);
+ match(TRANSIENT);
+ }
+ break;
+ case VOLATILE:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(267);
+ match(VOLATILE);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassOrInterfaceModifierContext extends ParserRuleContext {
+ public AnnotationContext annotation() {
+ return getRuleContext(AnnotationContext.class,0);
+ }
+ public TerminalNode PUBLIC() { return getToken(JavaParser.PUBLIC, 0); }
+ public TerminalNode PROTECTED() { return getToken(JavaParser.PROTECTED, 0); }
+ public TerminalNode PRIVATE() { return getToken(JavaParser.PRIVATE, 0); }
+ public TerminalNode STATIC() { return getToken(JavaParser.STATIC, 0); }
+ public TerminalNode ABSTRACT() { return getToken(JavaParser.ABSTRACT, 0); }
+ public TerminalNode FINAL() { return getToken(JavaParser.FINAL, 0); }
+ public TerminalNode STRICTFP() { return getToken(JavaParser.STRICTFP, 0); }
+ public ClassOrInterfaceModifierContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classOrInterfaceModifier; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassOrInterfaceModifier(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassOrInterfaceModifier(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassOrInterfaceModifier(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassOrInterfaceModifierContext classOrInterfaceModifier() throws RecognitionException {
+ ClassOrInterfaceModifierContext _localctx = new ClassOrInterfaceModifierContext(_ctx, getState());
+ enterRule(_localctx, 10, RULE_classOrInterfaceModifier);
+ try {
+ setState(278);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(270);
+ annotation();
+ }
+ break;
+ case PUBLIC:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(271);
+ match(PUBLIC);
+ }
+ break;
+ case PROTECTED:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(272);
+ match(PROTECTED);
+ }
+ break;
+ case PRIVATE:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(273);
+ match(PRIVATE);
+ }
+ break;
+ case STATIC:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(274);
+ match(STATIC);
+ }
+ break;
+ case ABSTRACT:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(275);
+ match(ABSTRACT);
+ }
+ break;
+ case FINAL:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(276);
+ match(FINAL);
+ }
+ break;
+ case STRICTFP:
+ enterOuterAlt(_localctx, 8);
+ {
+ setState(277);
+ match(STRICTFP);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableModifierContext extends ParserRuleContext {
+ public TerminalNode FINAL() { return getToken(JavaParser.FINAL, 0); }
+ public AnnotationContext annotation() {
+ return getRuleContext(AnnotationContext.class,0);
+ }
+ public VariableModifierContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variableModifier; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterVariableModifier(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitVariableModifier(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitVariableModifier(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final VariableModifierContext variableModifier() throws RecognitionException {
+ VariableModifierContext _localctx = new VariableModifierContext(_ctx, getState());
+ enterRule(_localctx, 12, RULE_variableModifier);
+ try {
+ setState(282);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case FINAL:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(280);
+ match(FINAL);
+ }
+ break;
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(281);
+ annotation();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassDeclarationContext extends ParserRuleContext {
+ public TerminalNode CLASS() { return getToken(JavaParser.CLASS, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public ClassBodyContext classBody() {
+ return getRuleContext(ClassBodyContext.class,0);
+ }
+ public TypeParametersContext typeParameters() {
+ return getRuleContext(TypeParametersContext.class,0);
+ }
+ public TerminalNode EXTENDS() { return getToken(JavaParser.EXTENDS, 0); }
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public TerminalNode IMPLEMENTS() { return getToken(JavaParser.IMPLEMENTS, 0); }
+ public TypeListContext typeList() {
+ return getRuleContext(TypeListContext.class,0);
+ }
+ public ClassDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassDeclarationContext classDeclaration() throws RecognitionException {
+ ClassDeclarationContext _localctx = new ClassDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 14, RULE_classDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(284);
+ match(CLASS);
+ setState(285);
+ match(IDENTIFIER);
+ setState(287);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(286);
+ typeParameters();
+ }
+ }
+
+ setState(291);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==EXTENDS) {
+ {
+ setState(289);
+ match(EXTENDS);
+ setState(290);
+ typeType();
+ }
+ }
+
+ setState(295);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==IMPLEMENTS) {
+ {
+ setState(293);
+ match(IMPLEMENTS);
+ setState(294);
+ typeList();
+ }
+ }
+
+ setState(297);
+ classBody();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeParametersContext extends ParserRuleContext {
+ public TerminalNode LT() { return getToken(JavaParser.LT, 0); }
+ public List typeParameter() {
+ return getRuleContexts(TypeParameterContext.class);
+ }
+ public TypeParameterContext typeParameter(int i) {
+ return getRuleContext(TypeParameterContext.class,i);
+ }
+ public TerminalNode GT() { return getToken(JavaParser.GT, 0); }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public TypeParametersContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeParameters; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeParameters(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeParameters(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeParameters(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeParametersContext typeParameters() throws RecognitionException {
+ TypeParametersContext _localctx = new TypeParametersContext(_ctx, getState());
+ enterRule(_localctx, 16, RULE_typeParameters);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(299);
+ match(LT);
+ setState(300);
+ typeParameter();
+ setState(305);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(301);
+ match(COMMA);
+ setState(302);
+ typeParameter();
+ }
+ }
+ setState(307);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(308);
+ match(GT);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeParameterContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public TerminalNode EXTENDS() { return getToken(JavaParser.EXTENDS, 0); }
+ public TypeBoundContext typeBound() {
+ return getRuleContext(TypeBoundContext.class,0);
+ }
+ public TypeParameterContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeParameter; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeParameter(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeParameter(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeParameter(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeParameterContext typeParameter() throws RecognitionException {
+ TypeParameterContext _localctx = new TypeParameterContext(_ctx, getState());
+ enterRule(_localctx, 18, RULE_typeParameter);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(313);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(310);
+ annotation();
+ }
+ }
+ }
+ setState(315);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ }
+ setState(316);
+ match(IDENTIFIER);
+ setState(325);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==EXTENDS) {
+ {
+ setState(317);
+ match(EXTENDS);
+ setState(321);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(318);
+ annotation();
+ }
+ }
+ }
+ setState(323);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
+ }
+ setState(324);
+ typeBound();
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeBoundContext extends ParserRuleContext {
+ public List typeType() {
+ return getRuleContexts(TypeTypeContext.class);
+ }
+ public TypeTypeContext typeType(int i) {
+ return getRuleContext(TypeTypeContext.class,i);
+ }
+ public List BITAND() { return getTokens(JavaParser.BITAND); }
+ public TerminalNode BITAND(int i) {
+ return getToken(JavaParser.BITAND, i);
+ }
+ public TypeBoundContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeBound; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeBound(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeBound(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeBound(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeBoundContext typeBound() throws RecognitionException {
+ TypeBoundContext _localctx = new TypeBoundContext(_ctx, getState());
+ enterRule(_localctx, 20, RULE_typeBound);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(327);
+ typeType();
+ setState(332);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==BITAND) {
+ {
+ {
+ setState(328);
+ match(BITAND);
+ setState(329);
+ typeType();
+ }
+ }
+ setState(334);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class EnumDeclarationContext extends ParserRuleContext {
+ public TerminalNode ENUM() { return getToken(JavaParser.ENUM, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public TerminalNode IMPLEMENTS() { return getToken(JavaParser.IMPLEMENTS, 0); }
+ public TypeListContext typeList() {
+ return getRuleContext(TypeListContext.class,0);
+ }
+ public EnumConstantsContext enumConstants() {
+ return getRuleContext(EnumConstantsContext.class,0);
+ }
+ public TerminalNode COMMA() { return getToken(JavaParser.COMMA, 0); }
+ public EnumBodyDeclarationsContext enumBodyDeclarations() {
+ return getRuleContext(EnumBodyDeclarationsContext.class,0);
+ }
+ public EnumDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_enumDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterEnumDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitEnumDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitEnumDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final EnumDeclarationContext enumDeclaration() throws RecognitionException {
+ EnumDeclarationContext _localctx = new EnumDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 22, RULE_enumDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(335);
+ match(ENUM);
+ setState(336);
+ match(IDENTIFIER);
+ setState(339);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==IMPLEMENTS) {
+ {
+ setState(337);
+ match(IMPLEMENTS);
+ setState(338);
+ typeList();
+ }
+ }
+
+ setState(341);
+ match(LBRACE);
+ setState(343);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==AT || _la==IDENTIFIER) {
+ {
+ setState(342);
+ enumConstants();
+ }
+ }
+
+ setState(346);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COMMA) {
+ {
+ setState(345);
+ match(COMMA);
+ }
+ }
+
+ setState(349);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==SEMI) {
+ {
+ setState(348);
+ enumBodyDeclarations();
+ }
+ }
+
+ setState(351);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class EnumConstantsContext extends ParserRuleContext {
+ public List enumConstant() {
+ return getRuleContexts(EnumConstantContext.class);
+ }
+ public EnumConstantContext enumConstant(int i) {
+ return getRuleContext(EnumConstantContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public EnumConstantsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_enumConstants; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterEnumConstants(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitEnumConstants(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitEnumConstants(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final EnumConstantsContext enumConstants() throws RecognitionException {
+ EnumConstantsContext _localctx = new EnumConstantsContext(_ctx, getState());
+ enterRule(_localctx, 24, RULE_enumConstants);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(353);
+ enumConstant();
+ setState(358);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,24,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(354);
+ match(COMMA);
+ setState(355);
+ enumConstant();
+ }
+ }
+ }
+ setState(360);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,24,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class EnumConstantContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public ArgumentsContext arguments() {
+ return getRuleContext(ArgumentsContext.class,0);
+ }
+ public ClassBodyContext classBody() {
+ return getRuleContext(ClassBodyContext.class,0);
+ }
+ public EnumConstantContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_enumConstant; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterEnumConstant(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitEnumConstant(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitEnumConstant(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final EnumConstantContext enumConstant() throws RecognitionException {
+ EnumConstantContext _localctx = new EnumConstantContext(_ctx, getState());
+ enterRule(_localctx, 26, RULE_enumConstant);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(364);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(361);
+ annotation();
+ }
+ }
+ }
+ setState(366);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
+ }
+ setState(367);
+ match(IDENTIFIER);
+ setState(369);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LPAREN) {
+ {
+ setState(368);
+ arguments();
+ }
+ }
+
+ setState(372);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LBRACE) {
+ {
+ setState(371);
+ classBody();
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class EnumBodyDeclarationsContext extends ParserRuleContext {
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public List classBodyDeclaration() {
+ return getRuleContexts(ClassBodyDeclarationContext.class);
+ }
+ public ClassBodyDeclarationContext classBodyDeclaration(int i) {
+ return getRuleContext(ClassBodyDeclarationContext.class,i);
+ }
+ public EnumBodyDeclarationsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_enumBodyDeclarations; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterEnumBodyDeclarations(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitEnumBodyDeclarations(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitEnumBodyDeclarations(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final EnumBodyDeclarationsContext enumBodyDeclarations() throws RecognitionException {
+ EnumBodyDeclarationsContext _localctx = new EnumBodyDeclarationsContext(_ctx, getState());
+ enterRule(_localctx, 28, RULE_enumBodyDeclarations);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(374);
+ match(SEMI);
+ setState(378);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOID) | (1L << VOLATILE))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (LBRACE - 64)) | (1L << (SEMI - 64)) | (1L << (LT - 64)) | (1L << (AT - 64)) | (1L << (IDENTIFIER - 64)))) != 0)) {
+ {
+ {
+ setState(375);
+ classBodyDeclaration();
+ }
+ }
+ setState(380);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InterfaceDeclarationContext extends ParserRuleContext {
+ public TerminalNode INTERFACE() { return getToken(JavaParser.INTERFACE, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public InterfaceBodyContext interfaceBody() {
+ return getRuleContext(InterfaceBodyContext.class,0);
+ }
+ public TypeParametersContext typeParameters() {
+ return getRuleContext(TypeParametersContext.class,0);
+ }
+ public TerminalNode EXTENDS() { return getToken(JavaParser.EXTENDS, 0); }
+ public TypeListContext typeList() {
+ return getRuleContext(TypeListContext.class,0);
+ }
+ public InterfaceDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_interfaceDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInterfaceDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInterfaceDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInterfaceDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InterfaceDeclarationContext interfaceDeclaration() throws RecognitionException {
+ InterfaceDeclarationContext _localctx = new InterfaceDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 30, RULE_interfaceDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(381);
+ match(INTERFACE);
+ setState(382);
+ match(IDENTIFIER);
+ setState(384);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(383);
+ typeParameters();
+ }
+ }
+
+ setState(388);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==EXTENDS) {
+ {
+ setState(386);
+ match(EXTENDS);
+ setState(387);
+ typeList();
+ }
+ }
+
+ setState(390);
+ interfaceBody();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassBodyContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List classBodyDeclaration() {
+ return getRuleContexts(ClassBodyDeclarationContext.class);
+ }
+ public ClassBodyDeclarationContext classBodyDeclaration(int i) {
+ return getRuleContext(ClassBodyDeclarationContext.class,i);
+ }
+ public ClassBodyContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classBody; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassBody(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassBody(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassBody(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassBodyContext classBody() throws RecognitionException {
+ ClassBodyContext _localctx = new ClassBodyContext(_ctx, getState());
+ enterRule(_localctx, 32, RULE_classBody);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(392);
+ match(LBRACE);
+ setState(396);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOID) | (1L << VOLATILE))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (LBRACE - 64)) | (1L << (SEMI - 64)) | (1L << (LT - 64)) | (1L << (AT - 64)) | (1L << (IDENTIFIER - 64)))) != 0)) {
+ {
+ {
+ setState(393);
+ classBodyDeclaration();
+ }
+ }
+ setState(398);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(399);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InterfaceBodyContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List interfaceBodyDeclaration() {
+ return getRuleContexts(InterfaceBodyDeclarationContext.class);
+ }
+ public InterfaceBodyDeclarationContext interfaceBodyDeclaration(int i) {
+ return getRuleContext(InterfaceBodyDeclarationContext.class,i);
+ }
+ public InterfaceBodyContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_interfaceBody; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInterfaceBody(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInterfaceBody(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInterfaceBody(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InterfaceBodyContext interfaceBody() throws RecognitionException {
+ InterfaceBodyContext _localctx = new InterfaceBodyContext(_ctx, getState());
+ enterRule(_localctx, 34, RULE_interfaceBody);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(401);
+ match(LBRACE);
+ setState(405);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DEFAULT) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOID) | (1L << VOLATILE))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (SEMI - 68)) | (1L << (LT - 68)) | (1L << (AT - 68)) | (1L << (IDENTIFIER - 68)))) != 0)) {
+ {
+ {
+ setState(402);
+ interfaceBodyDeclaration();
+ }
+ }
+ setState(407);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(408);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassBodyDeclarationContext extends ParserRuleContext {
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public TerminalNode STATIC() { return getToken(JavaParser.STATIC, 0); }
+ public MemberDeclarationContext memberDeclaration() {
+ return getRuleContext(MemberDeclarationContext.class,0);
+ }
+ public List modifier() {
+ return getRuleContexts(ModifierContext.class);
+ }
+ public ModifierContext modifier(int i) {
+ return getRuleContext(ModifierContext.class,i);
+ }
+ public ClassBodyDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classBodyDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassBodyDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassBodyDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassBodyDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassBodyDeclarationContext classBodyDeclaration() throws RecognitionException {
+ ClassBodyDeclarationContext _localctx = new ClassBodyDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 36, RULE_classBodyDeclaration);
+ int _la;
+ try {
+ int _alt;
+ setState(422);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(410);
+ match(SEMI);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(412);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==STATIC) {
+ {
+ setState(411);
+ match(STATIC);
+ }
+ }
+
+ setState(414);
+ block();
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(418);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,34,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(415);
+ modifier();
+ }
+ }
+ }
+ setState(420);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,34,_ctx);
+ }
+ setState(421);
+ memberDeclaration();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class MemberDeclarationContext extends ParserRuleContext {
+ public MethodDeclarationContext methodDeclaration() {
+ return getRuleContext(MethodDeclarationContext.class,0);
+ }
+ public GenericMethodDeclarationContext genericMethodDeclaration() {
+ return getRuleContext(GenericMethodDeclarationContext.class,0);
+ }
+ public FieldDeclarationContext fieldDeclaration() {
+ return getRuleContext(FieldDeclarationContext.class,0);
+ }
+ public ConstructorDeclarationContext constructorDeclaration() {
+ return getRuleContext(ConstructorDeclarationContext.class,0);
+ }
+ public GenericConstructorDeclarationContext genericConstructorDeclaration() {
+ return getRuleContext(GenericConstructorDeclarationContext.class,0);
+ }
+ public InterfaceDeclarationContext interfaceDeclaration() {
+ return getRuleContext(InterfaceDeclarationContext.class,0);
+ }
+ public AnnotationTypeDeclarationContext annotationTypeDeclaration() {
+ return getRuleContext(AnnotationTypeDeclarationContext.class,0);
+ }
+ public ClassDeclarationContext classDeclaration() {
+ return getRuleContext(ClassDeclarationContext.class,0);
+ }
+ public EnumDeclarationContext enumDeclaration() {
+ return getRuleContext(EnumDeclarationContext.class,0);
+ }
+ public MemberDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_memberDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterMemberDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitMemberDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitMemberDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final MemberDeclarationContext memberDeclaration() throws RecognitionException {
+ MemberDeclarationContext _localctx = new MemberDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 38, RULE_memberDeclaration);
+ try {
+ setState(433);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(424);
+ methodDeclaration();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(425);
+ genericMethodDeclaration();
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(426);
+ fieldDeclaration();
+ }
+ break;
+ case 4:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(427);
+ constructorDeclaration();
+ }
+ break;
+ case 5:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(428);
+ genericConstructorDeclaration();
+ }
+ break;
+ case 6:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(429);
+ interfaceDeclaration();
+ }
+ break;
+ case 7:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(430);
+ annotationTypeDeclaration();
+ }
+ break;
+ case 8:
+ enterOuterAlt(_localctx, 8);
+ {
+ setState(431);
+ classDeclaration();
+ }
+ break;
+ case 9:
+ enterOuterAlt(_localctx, 9);
+ {
+ setState(432);
+ enumDeclaration();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class MethodDeclarationContext extends ParserRuleContext {
+ public TypeTypeOrVoidContext typeTypeOrVoid() {
+ return getRuleContext(TypeTypeOrVoidContext.class,0);
+ }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public FormalParametersContext formalParameters() {
+ return getRuleContext(FormalParametersContext.class,0);
+ }
+ public MethodBodyContext methodBody() {
+ return getRuleContext(MethodBodyContext.class,0);
+ }
+ public List LBRACK() { return getTokens(JavaParser.LBRACK); }
+ public TerminalNode LBRACK(int i) {
+ return getToken(JavaParser.LBRACK, i);
+ }
+ public List RBRACK() { return getTokens(JavaParser.RBRACK); }
+ public TerminalNode RBRACK(int i) {
+ return getToken(JavaParser.RBRACK, i);
+ }
+ public TerminalNode THROWS() { return getToken(JavaParser.THROWS, 0); }
+ public QualifiedNameListContext qualifiedNameList() {
+ return getRuleContext(QualifiedNameListContext.class,0);
+ }
+ public MethodDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_methodDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterMethodDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitMethodDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitMethodDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final MethodDeclarationContext methodDeclaration() throws RecognitionException {
+ MethodDeclarationContext _localctx = new MethodDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 40, RULE_methodDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(435);
+ typeTypeOrVoid();
+ setState(436);
+ match(IDENTIFIER);
+ setState(437);
+ formalParameters();
+ setState(442);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==LBRACK) {
+ {
+ {
+ setState(438);
+ match(LBRACK);
+ setState(439);
+ match(RBRACK);
+ }
+ }
+ setState(444);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(447);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==THROWS) {
+ {
+ setState(445);
+ match(THROWS);
+ setState(446);
+ qualifiedNameList();
+ }
+ }
+
+ setState(449);
+ methodBody();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class MethodBodyContext extends ParserRuleContext {
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public MethodBodyContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_methodBody; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterMethodBody(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitMethodBody(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitMethodBody(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final MethodBodyContext methodBody() throws RecognitionException {
+ MethodBodyContext _localctx = new MethodBodyContext(_ctx, getState());
+ enterRule(_localctx, 42, RULE_methodBody);
+ try {
+ setState(453);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case LBRACE:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(451);
+ block();
+ }
+ break;
+ case SEMI:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(452);
+ match(SEMI);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeTypeOrVoidContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public TerminalNode VOID() { return getToken(JavaParser.VOID, 0); }
+ public TypeTypeOrVoidContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeTypeOrVoid; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeTypeOrVoid(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeTypeOrVoid(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeTypeOrVoid(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeTypeOrVoidContext typeTypeOrVoid() throws RecognitionException {
+ TypeTypeOrVoidContext _localctx = new TypeTypeOrVoidContext(_ctx, getState());
+ enterRule(_localctx, 44, RULE_typeTypeOrVoid);
+ try {
+ setState(457);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case SHORT:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(455);
+ typeType();
+ }
+ break;
+ case VOID:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(456);
+ match(VOID);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class GenericMethodDeclarationContext extends ParserRuleContext {
+ public TypeParametersContext typeParameters() {
+ return getRuleContext(TypeParametersContext.class,0);
+ }
+ public MethodDeclarationContext methodDeclaration() {
+ return getRuleContext(MethodDeclarationContext.class,0);
+ }
+ public GenericMethodDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_genericMethodDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterGenericMethodDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitGenericMethodDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitGenericMethodDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final GenericMethodDeclarationContext genericMethodDeclaration() throws RecognitionException {
+ GenericMethodDeclarationContext _localctx = new GenericMethodDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 46, RULE_genericMethodDeclaration);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(459);
+ typeParameters();
+ setState(460);
+ methodDeclaration();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class GenericConstructorDeclarationContext extends ParserRuleContext {
+ public TypeParametersContext typeParameters() {
+ return getRuleContext(TypeParametersContext.class,0);
+ }
+ public ConstructorDeclarationContext constructorDeclaration() {
+ return getRuleContext(ConstructorDeclarationContext.class,0);
+ }
+ public GenericConstructorDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_genericConstructorDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterGenericConstructorDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitGenericConstructorDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitGenericConstructorDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final GenericConstructorDeclarationContext genericConstructorDeclaration() throws RecognitionException {
+ GenericConstructorDeclarationContext _localctx = new GenericConstructorDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 48, RULE_genericConstructorDeclaration);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(462);
+ typeParameters();
+ setState(463);
+ constructorDeclaration();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ConstructorDeclarationContext extends ParserRuleContext {
+ public BlockContext constructorBody;
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public FormalParametersContext formalParameters() {
+ return getRuleContext(FormalParametersContext.class,0);
+ }
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public TerminalNode THROWS() { return getToken(JavaParser.THROWS, 0); }
+ public QualifiedNameListContext qualifiedNameList() {
+ return getRuleContext(QualifiedNameListContext.class,0);
+ }
+ public ConstructorDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_constructorDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterConstructorDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitConstructorDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitConstructorDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ConstructorDeclarationContext constructorDeclaration() throws RecognitionException {
+ ConstructorDeclarationContext _localctx = new ConstructorDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 50, RULE_constructorDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(465);
+ match(IDENTIFIER);
+ setState(466);
+ formalParameters();
+ setState(469);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==THROWS) {
+ {
+ setState(467);
+ match(THROWS);
+ setState(468);
+ qualifiedNameList();
+ }
+ }
+
+ setState(471);
+ ((ConstructorDeclarationContext)_localctx).constructorBody = block();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FieldDeclarationContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public VariableDeclaratorsContext variableDeclarators() {
+ return getRuleContext(VariableDeclaratorsContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public FieldDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_fieldDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterFieldDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitFieldDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitFieldDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FieldDeclarationContext fieldDeclaration() throws RecognitionException {
+ FieldDeclarationContext _localctx = new FieldDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 52, RULE_fieldDeclaration);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(473);
+ typeType();
+ setState(474);
+ variableDeclarators();
+ setState(475);
+ match(SEMI);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InterfaceBodyDeclarationContext extends ParserRuleContext {
+ public InterfaceMemberDeclarationContext interfaceMemberDeclaration() {
+ return getRuleContext(InterfaceMemberDeclarationContext.class,0);
+ }
+ public List modifier() {
+ return getRuleContexts(ModifierContext.class);
+ }
+ public ModifierContext modifier(int i) {
+ return getRuleContext(ModifierContext.class,i);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public InterfaceBodyDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_interfaceBodyDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInterfaceBodyDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInterfaceBodyDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInterfaceBodyDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InterfaceBodyDeclarationContext interfaceBodyDeclaration() throws RecognitionException {
+ InterfaceBodyDeclarationContext _localctx = new InterfaceBodyDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 54, RULE_interfaceBodyDeclaration);
+ try {
+ int _alt;
+ setState(485);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case ABSTRACT:
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case CLASS:
+ case DEFAULT:
+ case DOUBLE:
+ case ENUM:
+ case FINAL:
+ case FLOAT:
+ case INT:
+ case INTERFACE:
+ case LONG:
+ case NATIVE:
+ case PRIVATE:
+ case PROTECTED:
+ case PUBLIC:
+ case SHORT:
+ case STATIC:
+ case STRICTFP:
+ case SYNCHRONIZED:
+ case TRANSIENT:
+ case VOID:
+ case VOLATILE:
+ case LT:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(480);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,42,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(477);
+ modifier();
+ }
+ }
+ }
+ setState(482);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,42,_ctx);
+ }
+ setState(483);
+ interfaceMemberDeclaration();
+ }
+ break;
+ case SEMI:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(484);
+ match(SEMI);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InterfaceMemberDeclarationContext extends ParserRuleContext {
+ public ConstDeclarationContext constDeclaration() {
+ return getRuleContext(ConstDeclarationContext.class,0);
+ }
+ public InterfaceMethodDeclarationContext interfaceMethodDeclaration() {
+ return getRuleContext(InterfaceMethodDeclarationContext.class,0);
+ }
+ public GenericInterfaceMethodDeclarationContext genericInterfaceMethodDeclaration() {
+ return getRuleContext(GenericInterfaceMethodDeclarationContext.class,0);
+ }
+ public InterfaceDeclarationContext interfaceDeclaration() {
+ return getRuleContext(InterfaceDeclarationContext.class,0);
+ }
+ public AnnotationTypeDeclarationContext annotationTypeDeclaration() {
+ return getRuleContext(AnnotationTypeDeclarationContext.class,0);
+ }
+ public ClassDeclarationContext classDeclaration() {
+ return getRuleContext(ClassDeclarationContext.class,0);
+ }
+ public EnumDeclarationContext enumDeclaration() {
+ return getRuleContext(EnumDeclarationContext.class,0);
+ }
+ public InterfaceMemberDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_interfaceMemberDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInterfaceMemberDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInterfaceMemberDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInterfaceMemberDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InterfaceMemberDeclarationContext interfaceMemberDeclaration() throws RecognitionException {
+ InterfaceMemberDeclarationContext _localctx = new InterfaceMemberDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 56, RULE_interfaceMemberDeclaration);
+ try {
+ setState(494);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(487);
+ constDeclaration();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(488);
+ interfaceMethodDeclaration();
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(489);
+ genericInterfaceMethodDeclaration();
+ }
+ break;
+ case 4:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(490);
+ interfaceDeclaration();
+ }
+ break;
+ case 5:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(491);
+ annotationTypeDeclaration();
+ }
+ break;
+ case 6:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(492);
+ classDeclaration();
+ }
+ break;
+ case 7:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(493);
+ enumDeclaration();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ConstDeclarationContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public List constantDeclarator() {
+ return getRuleContexts(ConstantDeclaratorContext.class);
+ }
+ public ConstantDeclaratorContext constantDeclarator(int i) {
+ return getRuleContext(ConstantDeclaratorContext.class,i);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public ConstDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_constDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterConstDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitConstDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitConstDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ConstDeclarationContext constDeclaration() throws RecognitionException {
+ ConstDeclarationContext _localctx = new ConstDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 58, RULE_constDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(496);
+ typeType();
+ setState(497);
+ constantDeclarator();
+ setState(502);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(498);
+ match(COMMA);
+ setState(499);
+ constantDeclarator();
+ }
+ }
+ setState(504);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(505);
+ match(SEMI);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ConstantDeclaratorContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode ASSIGN() { return getToken(JavaParser.ASSIGN, 0); }
+ public VariableInitializerContext variableInitializer() {
+ return getRuleContext(VariableInitializerContext.class,0);
+ }
+ public List LBRACK() { return getTokens(JavaParser.LBRACK); }
+ public TerminalNode LBRACK(int i) {
+ return getToken(JavaParser.LBRACK, i);
+ }
+ public List RBRACK() { return getTokens(JavaParser.RBRACK); }
+ public TerminalNode RBRACK(int i) {
+ return getToken(JavaParser.RBRACK, i);
+ }
+ public ConstantDeclaratorContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_constantDeclarator; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterConstantDeclarator(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitConstantDeclarator(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitConstantDeclarator(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ConstantDeclaratorContext constantDeclarator() throws RecognitionException {
+ ConstantDeclaratorContext _localctx = new ConstantDeclaratorContext(_ctx, getState());
+ enterRule(_localctx, 60, RULE_constantDeclarator);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(507);
+ match(IDENTIFIER);
+ setState(512);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==LBRACK) {
+ {
+ {
+ setState(508);
+ match(LBRACK);
+ setState(509);
+ match(RBRACK);
+ }
+ }
+ setState(514);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(515);
+ match(ASSIGN);
+ setState(516);
+ variableInitializer();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InterfaceMethodDeclarationContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public FormalParametersContext formalParameters() {
+ return getRuleContext(FormalParametersContext.class,0);
+ }
+ public MethodBodyContext methodBody() {
+ return getRuleContext(MethodBodyContext.class,0);
+ }
+ public TypeTypeOrVoidContext typeTypeOrVoid() {
+ return getRuleContext(TypeTypeOrVoidContext.class,0);
+ }
+ public TypeParametersContext typeParameters() {
+ return getRuleContext(TypeParametersContext.class,0);
+ }
+ public List interfaceMethodModifier() {
+ return getRuleContexts(InterfaceMethodModifierContext.class);
+ }
+ public InterfaceMethodModifierContext interfaceMethodModifier(int i) {
+ return getRuleContext(InterfaceMethodModifierContext.class,i);
+ }
+ public List LBRACK() { return getTokens(JavaParser.LBRACK); }
+ public TerminalNode LBRACK(int i) {
+ return getToken(JavaParser.LBRACK, i);
+ }
+ public List RBRACK() { return getTokens(JavaParser.RBRACK); }
+ public TerminalNode RBRACK(int i) {
+ return getToken(JavaParser.RBRACK, i);
+ }
+ public TerminalNode THROWS() { return getToken(JavaParser.THROWS, 0); }
+ public QualifiedNameListContext qualifiedNameList() {
+ return getRuleContext(QualifiedNameListContext.class,0);
+ }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public InterfaceMethodDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_interfaceMethodDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInterfaceMethodDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInterfaceMethodDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInterfaceMethodDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InterfaceMethodDeclarationContext interfaceMethodDeclaration() throws RecognitionException {
+ InterfaceMethodDeclarationContext _localctx = new InterfaceMethodDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 62, RULE_interfaceMethodDeclaration);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(521);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,47,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(518);
+ interfaceMethodModifier();
+ }
+ }
+ }
+ setState(523);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,47,_ctx);
+ }
+ setState(534);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case SHORT:
+ case VOID:
+ case AT:
+ case IDENTIFIER:
+ {
+ setState(524);
+ typeTypeOrVoid();
+ }
+ break;
+ case LT:
+ {
+ setState(525);
+ typeParameters();
+ setState(529);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,48,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(526);
+ annotation();
+ }
+ }
+ }
+ setState(531);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,48,_ctx);
+ }
+ setState(532);
+ typeTypeOrVoid();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ setState(536);
+ match(IDENTIFIER);
+ setState(537);
+ formalParameters();
+ setState(542);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==LBRACK) {
+ {
+ {
+ setState(538);
+ match(LBRACK);
+ setState(539);
+ match(RBRACK);
+ }
+ }
+ setState(544);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(547);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==THROWS) {
+ {
+ setState(545);
+ match(THROWS);
+ setState(546);
+ qualifiedNameList();
+ }
+ }
+
+ setState(549);
+ methodBody();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InterfaceMethodModifierContext extends ParserRuleContext {
+ public AnnotationContext annotation() {
+ return getRuleContext(AnnotationContext.class,0);
+ }
+ public TerminalNode PUBLIC() { return getToken(JavaParser.PUBLIC, 0); }
+ public TerminalNode ABSTRACT() { return getToken(JavaParser.ABSTRACT, 0); }
+ public TerminalNode DEFAULT() { return getToken(JavaParser.DEFAULT, 0); }
+ public TerminalNode STATIC() { return getToken(JavaParser.STATIC, 0); }
+ public TerminalNode STRICTFP() { return getToken(JavaParser.STRICTFP, 0); }
+ public InterfaceMethodModifierContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_interfaceMethodModifier; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInterfaceMethodModifier(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInterfaceMethodModifier(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInterfaceMethodModifier(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InterfaceMethodModifierContext interfaceMethodModifier() throws RecognitionException {
+ InterfaceMethodModifierContext _localctx = new InterfaceMethodModifierContext(_ctx, getState());
+ enterRule(_localctx, 64, RULE_interfaceMethodModifier);
+ try {
+ setState(557);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(551);
+ annotation();
+ }
+ break;
+ case PUBLIC:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(552);
+ match(PUBLIC);
+ }
+ break;
+ case ABSTRACT:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(553);
+ match(ABSTRACT);
+ }
+ break;
+ case DEFAULT:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(554);
+ match(DEFAULT);
+ }
+ break;
+ case STATIC:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(555);
+ match(STATIC);
+ }
+ break;
+ case STRICTFP:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(556);
+ match(STRICTFP);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class GenericInterfaceMethodDeclarationContext extends ParserRuleContext {
+ public TypeParametersContext typeParameters() {
+ return getRuleContext(TypeParametersContext.class,0);
+ }
+ public InterfaceMethodDeclarationContext interfaceMethodDeclaration() {
+ return getRuleContext(InterfaceMethodDeclarationContext.class,0);
+ }
+ public GenericInterfaceMethodDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_genericInterfaceMethodDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterGenericInterfaceMethodDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitGenericInterfaceMethodDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitGenericInterfaceMethodDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final GenericInterfaceMethodDeclarationContext genericInterfaceMethodDeclaration() throws RecognitionException {
+ GenericInterfaceMethodDeclarationContext _localctx = new GenericInterfaceMethodDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 66, RULE_genericInterfaceMethodDeclaration);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(559);
+ typeParameters();
+ setState(560);
+ interfaceMethodDeclaration();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableDeclaratorsContext extends ParserRuleContext {
+ public List variableDeclarator() {
+ return getRuleContexts(VariableDeclaratorContext.class);
+ }
+ public VariableDeclaratorContext variableDeclarator(int i) {
+ return getRuleContext(VariableDeclaratorContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public VariableDeclaratorsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variableDeclarators; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterVariableDeclarators(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitVariableDeclarators(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitVariableDeclarators(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final VariableDeclaratorsContext variableDeclarators() throws RecognitionException {
+ VariableDeclaratorsContext _localctx = new VariableDeclaratorsContext(_ctx, getState());
+ enterRule(_localctx, 68, RULE_variableDeclarators);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(562);
+ variableDeclarator();
+ setState(567);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(563);
+ match(COMMA);
+ setState(564);
+ variableDeclarator();
+ }
+ }
+ setState(569);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableDeclaratorContext extends ParserRuleContext {
+ public VariableDeclaratorIdContext variableDeclaratorId() {
+ return getRuleContext(VariableDeclaratorIdContext.class,0);
+ }
+ public TerminalNode ASSIGN() { return getToken(JavaParser.ASSIGN, 0); }
+ public VariableInitializerContext variableInitializer() {
+ return getRuleContext(VariableInitializerContext.class,0);
+ }
+ public VariableDeclaratorContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variableDeclarator; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterVariableDeclarator(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitVariableDeclarator(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitVariableDeclarator(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final VariableDeclaratorContext variableDeclarator() throws RecognitionException {
+ VariableDeclaratorContext _localctx = new VariableDeclaratorContext(_ctx, getState());
+ enterRule(_localctx, 70, RULE_variableDeclarator);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(570);
+ variableDeclaratorId();
+ setState(573);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==ASSIGN) {
+ {
+ setState(571);
+ match(ASSIGN);
+ setState(572);
+ variableInitializer();
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableDeclaratorIdContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public List LBRACK() { return getTokens(JavaParser.LBRACK); }
+ public TerminalNode LBRACK(int i) {
+ return getToken(JavaParser.LBRACK, i);
+ }
+ public List RBRACK() { return getTokens(JavaParser.RBRACK); }
+ public TerminalNode RBRACK(int i) {
+ return getToken(JavaParser.RBRACK, i);
+ }
+ public VariableDeclaratorIdContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variableDeclaratorId; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterVariableDeclaratorId(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitVariableDeclaratorId(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitVariableDeclaratorId(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final VariableDeclaratorIdContext variableDeclaratorId() throws RecognitionException {
+ VariableDeclaratorIdContext _localctx = new VariableDeclaratorIdContext(_ctx, getState());
+ enterRule(_localctx, 72, RULE_variableDeclaratorId);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(575);
+ match(IDENTIFIER);
+ setState(580);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==LBRACK) {
+ {
+ {
+ setState(576);
+ match(LBRACK);
+ setState(577);
+ match(RBRACK);
+ }
+ }
+ setState(582);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableInitializerContext extends ParserRuleContext {
+ public ArrayInitializerContext arrayInitializer() {
+ return getRuleContext(ArrayInitializerContext.class,0);
+ }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public VariableInitializerContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variableInitializer; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterVariableInitializer(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitVariableInitializer(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitVariableInitializer(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final VariableInitializerContext variableInitializer() throws RecognitionException {
+ VariableInitializerContext _localctx = new VariableInitializerContext(_ctx, getState());
+ enterRule(_localctx, 74, RULE_variableInitializer);
+ try {
+ setState(585);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case LBRACE:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(583);
+ arrayInitializer();
+ }
+ break;
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case NEW:
+ case SHORT:
+ case SUPER:
+ case THIS:
+ case VOID:
+ case DECIMAL_LITERAL:
+ case HEX_LITERAL:
+ case OCT_LITERAL:
+ case BINARY_LITERAL:
+ case FLOAT_LITERAL:
+ case HEX_FLOAT_LITERAL:
+ case BOOL_LITERAL:
+ case CHAR_LITERAL:
+ case STRING_LITERAL:
+ case NULL_LITERAL:
+ case LPAREN:
+ case LT:
+ case BANG:
+ case TILDE:
+ case INC:
+ case DEC:
+ case ADD:
+ case SUB:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(584);
+ expression(0);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ArrayInitializerContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List variableInitializer() {
+ return getRuleContexts(VariableInitializerContext.class);
+ }
+ public VariableInitializerContext variableInitializer(int i) {
+ return getRuleContext(VariableInitializerContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public ArrayInitializerContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_arrayInitializer; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterArrayInitializer(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitArrayInitializer(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitArrayInitializer(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ArrayInitializerContext arrayInitializer() throws RecognitionException {
+ ArrayInitializerContext _localctx = new ArrayInitializerContext(_ctx, getState());
+ enterRule(_localctx, 76, RULE_arrayInitializer);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(587);
+ match(LBRACE);
+ setState(599);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (LBRACE - 64)) | (1L << (LT - 64)) | (1L << (BANG - 64)) | (1L << (TILDE - 64)) | (1L << (INC - 64)) | (1L << (DEC - 64)) | (1L << (ADD - 64)) | (1L << (SUB - 64)) | (1L << (AT - 64)) | (1L << (IDENTIFIER - 64)))) != 0)) {
+ {
+ setState(588);
+ variableInitializer();
+ setState(593);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,57,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(589);
+ match(COMMA);
+ setState(590);
+ variableInitializer();
+ }
+ }
+ }
+ setState(595);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,57,_ctx);
+ }
+ setState(597);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COMMA) {
+ {
+ setState(596);
+ match(COMMA);
+ }
+ }
+
+ }
+ }
+
+ setState(601);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassOrInterfaceTypeContext extends ParserRuleContext {
+ public List IDENTIFIER() { return getTokens(JavaParser.IDENTIFIER); }
+ public TerminalNode IDENTIFIER(int i) {
+ return getToken(JavaParser.IDENTIFIER, i);
+ }
+ public List typeArguments() {
+ return getRuleContexts(TypeArgumentsContext.class);
+ }
+ public TypeArgumentsContext typeArguments(int i) {
+ return getRuleContext(TypeArgumentsContext.class,i);
+ }
+ public List DOT() { return getTokens(JavaParser.DOT); }
+ public TerminalNode DOT(int i) {
+ return getToken(JavaParser.DOT, i);
+ }
+ public ClassOrInterfaceTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classOrInterfaceType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassOrInterfaceType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassOrInterfaceType(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassOrInterfaceType(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassOrInterfaceTypeContext classOrInterfaceType() throws RecognitionException {
+ ClassOrInterfaceTypeContext _localctx = new ClassOrInterfaceTypeContext(_ctx, getState());
+ enterRule(_localctx, 78, RULE_classOrInterfaceType);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(603);
+ match(IDENTIFIER);
+ setState(605);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
+ case 1:
+ {
+ setState(604);
+ typeArguments();
+ }
+ break;
+ }
+ setState(614);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,62,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(607);
+ match(DOT);
+ setState(608);
+ match(IDENTIFIER);
+ setState(610);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
+ case 1:
+ {
+ setState(609);
+ typeArguments();
+ }
+ break;
+ }
+ }
+ }
+ }
+ setState(616);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,62,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeArgumentContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public TerminalNode QUESTION() { return getToken(JavaParser.QUESTION, 0); }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public TerminalNode EXTENDS() { return getToken(JavaParser.EXTENDS, 0); }
+ public TerminalNode SUPER() { return getToken(JavaParser.SUPER, 0); }
+ public TypeArgumentContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeArgument; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeArgument(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeArgument(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeArgument(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeArgumentContext typeArgument() throws RecognitionException {
+ TypeArgumentContext _localctx = new TypeArgumentContext(_ctx, getState());
+ enterRule(_localctx, 80, RULE_typeArgument);
+ int _la;
+ try {
+ setState(629);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(617);
+ typeType();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(621);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==AT || _la==IDENTIFIER) {
+ {
+ {
+ setState(618);
+ annotation();
+ }
+ }
+ setState(623);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(624);
+ match(QUESTION);
+ setState(627);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==EXTENDS || _la==SUPER) {
+ {
+ setState(625);
+ _la = _input.LA(1);
+ if ( !(_la==EXTENDS || _la==SUPER) ) {
+ _errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(626);
+ typeType();
+ }
+ }
+
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class QualifiedNameListContext extends ParserRuleContext {
+ public List qualifiedName() {
+ return getRuleContexts(QualifiedNameContext.class);
+ }
+ public QualifiedNameContext qualifiedName(int i) {
+ return getRuleContext(QualifiedNameContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public QualifiedNameListContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_qualifiedNameList; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterQualifiedNameList(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitQualifiedNameList(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitQualifiedNameList(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final QualifiedNameListContext qualifiedNameList() throws RecognitionException {
+ QualifiedNameListContext _localctx = new QualifiedNameListContext(_ctx, getState());
+ enterRule(_localctx, 82, RULE_qualifiedNameList);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(631);
+ qualifiedName();
+ setState(636);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(632);
+ match(COMMA);
+ setState(633);
+ qualifiedName();
+ }
+ }
+ setState(638);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FormalParametersContext extends ParserRuleContext {
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public FormalParameterListContext formalParameterList() {
+ return getRuleContext(FormalParameterListContext.class,0);
+ }
+ public FormalParametersContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_formalParameters; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterFormalParameters(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitFormalParameters(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitFormalParameters(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FormalParametersContext formalParameters() throws RecognitionException {
+ FormalParametersContext _localctx = new FormalParametersContext(_ctx, getState());
+ enterRule(_localctx, 84, RULE_formalParameters);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(639);
+ match(LPAREN);
+ setState(641);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << SHORT))) != 0) || _la==AT || _la==IDENTIFIER) {
+ {
+ setState(640);
+ formalParameterList();
+ }
+ }
+
+ setState(643);
+ match(RPAREN);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FormalParameterListContext extends ParserRuleContext {
+ public List formalParameter() {
+ return getRuleContexts(FormalParameterContext.class);
+ }
+ public FormalParameterContext formalParameter(int i) {
+ return getRuleContext(FormalParameterContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public LastFormalParameterContext lastFormalParameter() {
+ return getRuleContext(LastFormalParameterContext.class,0);
+ }
+ public FormalParameterListContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_formalParameterList; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterFormalParameterList(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitFormalParameterList(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitFormalParameterList(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FormalParameterListContext formalParameterList() throws RecognitionException {
+ FormalParameterListContext _localctx = new FormalParameterListContext(_ctx, getState());
+ enterRule(_localctx, 86, RULE_formalParameterList);
+ int _la;
+ try {
+ int _alt;
+ setState(658);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(645);
+ formalParameter();
+ setState(650);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,68,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(646);
+ match(COMMA);
+ setState(647);
+ formalParameter();
+ }
+ }
+ }
+ setState(652);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,68,_ctx);
+ }
+ setState(655);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COMMA) {
+ {
+ setState(653);
+ match(COMMA);
+ setState(654);
+ lastFormalParameter();
+ }
+ }
+
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(657);
+ lastFormalParameter();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FormalParameterContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public VariableDeclaratorIdContext variableDeclaratorId() {
+ return getRuleContext(VariableDeclaratorIdContext.class,0);
+ }
+ public List variableModifier() {
+ return getRuleContexts(VariableModifierContext.class);
+ }
+ public VariableModifierContext variableModifier(int i) {
+ return getRuleContext(VariableModifierContext.class,i);
+ }
+ public FormalParameterContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_formalParameter; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterFormalParameter(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitFormalParameter(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitFormalParameter(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FormalParameterContext formalParameter() throws RecognitionException {
+ FormalParameterContext _localctx = new FormalParameterContext(_ctx, getState());
+ enterRule(_localctx, 88, RULE_formalParameter);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(663);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,71,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(660);
+ variableModifier();
+ }
+ }
+ }
+ setState(665);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,71,_ctx);
+ }
+ setState(666);
+ typeType();
+ setState(667);
+ variableDeclaratorId();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LastFormalParameterContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public TerminalNode ELLIPSIS() { return getToken(JavaParser.ELLIPSIS, 0); }
+ public VariableDeclaratorIdContext variableDeclaratorId() {
+ return getRuleContext(VariableDeclaratorIdContext.class,0);
+ }
+ public List variableModifier() {
+ return getRuleContexts(VariableModifierContext.class);
+ }
+ public VariableModifierContext variableModifier(int i) {
+ return getRuleContext(VariableModifierContext.class,i);
+ }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public LastFormalParameterContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_lastFormalParameter; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLastFormalParameter(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLastFormalParameter(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLastFormalParameter(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LastFormalParameterContext lastFormalParameter() throws RecognitionException {
+ LastFormalParameterContext _localctx = new LastFormalParameterContext(_ctx, getState());
+ enterRule(_localctx, 90, RULE_lastFormalParameter);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(672);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,72,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(669);
+ variableModifier();
+ }
+ }
+ }
+ setState(674);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,72,_ctx);
+ }
+ setState(675);
+ typeType();
+ setState(679);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==AT || _la==IDENTIFIER) {
+ {
+ {
+ setState(676);
+ annotation();
+ }
+ }
+ setState(681);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(682);
+ match(ELLIPSIS);
+ setState(683);
+ variableDeclaratorId();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class QualifiedNameContext extends ParserRuleContext {
+ public List IDENTIFIER() { return getTokens(JavaParser.IDENTIFIER); }
+ public TerminalNode IDENTIFIER(int i) {
+ return getToken(JavaParser.IDENTIFIER, i);
+ }
+ public List DOT() { return getTokens(JavaParser.DOT); }
+ public TerminalNode DOT(int i) {
+ return getToken(JavaParser.DOT, i);
+ }
+ public QualifiedNameContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_qualifiedName; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterQualifiedName(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitQualifiedName(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitQualifiedName(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final QualifiedNameContext qualifiedName() throws RecognitionException {
+ QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState());
+ enterRule(_localctx, 92, RULE_qualifiedName);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(685);
+ match(IDENTIFIER);
+ setState(690);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,74,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(686);
+ match(DOT);
+ setState(687);
+ match(IDENTIFIER);
+ }
+ }
+ }
+ setState(692);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,74,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LiteralContext extends ParserRuleContext {
+ public IntegerLiteralContext integerLiteral() {
+ return getRuleContext(IntegerLiteralContext.class,0);
+ }
+ public FloatLiteralContext floatLiteral() {
+ return getRuleContext(FloatLiteralContext.class,0);
+ }
+ public TerminalNode CHAR_LITERAL() { return getToken(JavaParser.CHAR_LITERAL, 0); }
+ public TerminalNode STRING_LITERAL() { return getToken(JavaParser.STRING_LITERAL, 0); }
+ public TerminalNode BOOL_LITERAL() { return getToken(JavaParser.BOOL_LITERAL, 0); }
+ public TerminalNode NULL_LITERAL() { return getToken(JavaParser.NULL_LITERAL, 0); }
+ public LiteralContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_literal; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLiteral(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLiteral(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLiteral(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LiteralContext literal() throws RecognitionException {
+ LiteralContext _localctx = new LiteralContext(_ctx, getState());
+ enterRule(_localctx, 94, RULE_literal);
+ try {
+ setState(699);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case DECIMAL_LITERAL:
+ case HEX_LITERAL:
+ case OCT_LITERAL:
+ case BINARY_LITERAL:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(693);
+ integerLiteral();
+ }
+ break;
+ case FLOAT_LITERAL:
+ case HEX_FLOAT_LITERAL:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(694);
+ floatLiteral();
+ }
+ break;
+ case CHAR_LITERAL:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(695);
+ match(CHAR_LITERAL);
+ }
+ break;
+ case STRING_LITERAL:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(696);
+ match(STRING_LITERAL);
+ }
+ break;
+ case BOOL_LITERAL:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(697);
+ match(BOOL_LITERAL);
+ }
+ break;
+ case NULL_LITERAL:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(698);
+ match(NULL_LITERAL);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class IntegerLiteralContext extends ParserRuleContext {
+ public TerminalNode DECIMAL_LITERAL() { return getToken(JavaParser.DECIMAL_LITERAL, 0); }
+ public TerminalNode HEX_LITERAL() { return getToken(JavaParser.HEX_LITERAL, 0); }
+ public TerminalNode OCT_LITERAL() { return getToken(JavaParser.OCT_LITERAL, 0); }
+ public TerminalNode BINARY_LITERAL() { return getToken(JavaParser.BINARY_LITERAL, 0); }
+ public IntegerLiteralContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_integerLiteral; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterIntegerLiteral(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitIntegerLiteral(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitIntegerLiteral(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final IntegerLiteralContext integerLiteral() throws RecognitionException {
+ IntegerLiteralContext _localctx = new IntegerLiteralContext(_ctx, getState());
+ enterRule(_localctx, 96, RULE_integerLiteral);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(701);
+ _la = _input.LA(1);
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL))) != 0)) ) {
+ _errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FloatLiteralContext extends ParserRuleContext {
+ public TerminalNode FLOAT_LITERAL() { return getToken(JavaParser.FLOAT_LITERAL, 0); }
+ public TerminalNode HEX_FLOAT_LITERAL() { return getToken(JavaParser.HEX_FLOAT_LITERAL, 0); }
+ public FloatLiteralContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_floatLiteral; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterFloatLiteral(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitFloatLiteral(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitFloatLiteral(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FloatLiteralContext floatLiteral() throws RecognitionException {
+ FloatLiteralContext _localctx = new FloatLiteralContext(_ctx, getState());
+ enterRule(_localctx, 98, RULE_floatLiteral);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(703);
+ _la = _input.LA(1);
+ if ( !(_la==FLOAT_LITERAL || _la==HEX_FLOAT_LITERAL) ) {
+ _errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AltAnnotationQualifiedNameContext extends ParserRuleContext {
+ public TerminalNode AT() { return getToken(JavaParser.AT, 0); }
+ public List IDENTIFIER() { return getTokens(JavaParser.IDENTIFIER); }
+ public TerminalNode IDENTIFIER(int i) {
+ return getToken(JavaParser.IDENTIFIER, i);
+ }
+ public List DOT() { return getTokens(JavaParser.DOT); }
+ public TerminalNode DOT(int i) {
+ return getToken(JavaParser.DOT, i);
+ }
+ public AltAnnotationQualifiedNameContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_altAnnotationQualifiedName; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAltAnnotationQualifiedName(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAltAnnotationQualifiedName(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAltAnnotationQualifiedName(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AltAnnotationQualifiedNameContext altAnnotationQualifiedName() throws RecognitionException {
+ AltAnnotationQualifiedNameContext _localctx = new AltAnnotationQualifiedNameContext(_ctx, getState());
+ enterRule(_localctx, 100, RULE_altAnnotationQualifiedName);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(709);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==IDENTIFIER) {
+ {
+ {
+ setState(705);
+ match(IDENTIFIER);
+ setState(706);
+ match(DOT);
+ }
+ }
+ setState(711);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(712);
+ match(AT);
+ setState(713);
+ match(IDENTIFIER);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationContext extends ParserRuleContext {
+ public TerminalNode AT() { return getToken(JavaParser.AT, 0); }
+ public QualifiedNameContext qualifiedName() {
+ return getRuleContext(QualifiedNameContext.class,0);
+ }
+ public AltAnnotationQualifiedNameContext altAnnotationQualifiedName() {
+ return getRuleContext(AltAnnotationQualifiedNameContext.class,0);
+ }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public ElementValuePairsContext elementValuePairs() {
+ return getRuleContext(ElementValuePairsContext.class,0);
+ }
+ public ElementValueContext elementValue() {
+ return getRuleContext(ElementValueContext.class,0);
+ }
+ public AnnotationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotation; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotation(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotation(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotation(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationContext annotation() throws RecognitionException {
+ AnnotationContext _localctx = new AnnotationContext(_ctx, getState());
+ enterRule(_localctx, 102, RULE_annotation);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(718);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,77,_ctx) ) {
+ case 1:
+ {
+ setState(715);
+ match(AT);
+ setState(716);
+ qualifiedName();
+ }
+ break;
+ case 2:
+ {
+ setState(717);
+ altAnnotationQualifiedName();
+ }
+ break;
+ }
+ setState(726);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LPAREN) {
+ {
+ setState(720);
+ match(LPAREN);
+ setState(723);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) {
+ case 1:
+ {
+ setState(721);
+ elementValuePairs();
+ }
+ break;
+ case 2:
+ {
+ setState(722);
+ elementValue();
+ }
+ break;
+ }
+ setState(725);
+ match(RPAREN);
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ElementValuePairsContext extends ParserRuleContext {
+ public List elementValuePair() {
+ return getRuleContexts(ElementValuePairContext.class);
+ }
+ public ElementValuePairContext elementValuePair(int i) {
+ return getRuleContext(ElementValuePairContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public ElementValuePairsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_elementValuePairs; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterElementValuePairs(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitElementValuePairs(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitElementValuePairs(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ElementValuePairsContext elementValuePairs() throws RecognitionException {
+ ElementValuePairsContext _localctx = new ElementValuePairsContext(_ctx, getState());
+ enterRule(_localctx, 104, RULE_elementValuePairs);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(728);
+ elementValuePair();
+ setState(733);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(729);
+ match(COMMA);
+ setState(730);
+ elementValuePair();
+ }
+ }
+ setState(735);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ElementValuePairContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode ASSIGN() { return getToken(JavaParser.ASSIGN, 0); }
+ public ElementValueContext elementValue() {
+ return getRuleContext(ElementValueContext.class,0);
+ }
+ public ElementValuePairContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_elementValuePair; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterElementValuePair(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitElementValuePair(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitElementValuePair(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ElementValuePairContext elementValuePair() throws RecognitionException {
+ ElementValuePairContext _localctx = new ElementValuePairContext(_ctx, getState());
+ enterRule(_localctx, 106, RULE_elementValuePair);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(736);
+ match(IDENTIFIER);
+ setState(737);
+ match(ASSIGN);
+ setState(738);
+ elementValue();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ElementValueContext extends ParserRuleContext {
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public AnnotationContext annotation() {
+ return getRuleContext(AnnotationContext.class,0);
+ }
+ public ElementValueArrayInitializerContext elementValueArrayInitializer() {
+ return getRuleContext(ElementValueArrayInitializerContext.class,0);
+ }
+ public ElementValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_elementValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterElementValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitElementValue(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitElementValue(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ElementValueContext elementValue() throws RecognitionException {
+ ElementValueContext _localctx = new ElementValueContext(_ctx, getState());
+ enterRule(_localctx, 108, RULE_elementValue);
+ try {
+ setState(743);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(740);
+ expression(0);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(741);
+ annotation();
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(742);
+ elementValueArrayInitializer();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ElementValueArrayInitializerContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List elementValue() {
+ return getRuleContexts(ElementValueContext.class);
+ }
+ public ElementValueContext elementValue(int i) {
+ return getRuleContext(ElementValueContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public ElementValueArrayInitializerContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_elementValueArrayInitializer; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterElementValueArrayInitializer(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitElementValueArrayInitializer(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitElementValueArrayInitializer(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ElementValueArrayInitializerContext elementValueArrayInitializer() throws RecognitionException {
+ ElementValueArrayInitializerContext _localctx = new ElementValueArrayInitializerContext(_ctx, getState());
+ enterRule(_localctx, 110, RULE_elementValueArrayInitializer);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(745);
+ match(LBRACE);
+ setState(754);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (LBRACE - 64)) | (1L << (LT - 64)) | (1L << (BANG - 64)) | (1L << (TILDE - 64)) | (1L << (INC - 64)) | (1L << (DEC - 64)) | (1L << (ADD - 64)) | (1L << (SUB - 64)) | (1L << (AT - 64)) | (1L << (IDENTIFIER - 64)))) != 0)) {
+ {
+ setState(746);
+ elementValue();
+ setState(751);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,82,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(747);
+ match(COMMA);
+ setState(748);
+ elementValue();
+ }
+ }
+ }
+ setState(753);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,82,_ctx);
+ }
+ }
+ }
+
+ setState(757);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COMMA) {
+ {
+ setState(756);
+ match(COMMA);
+ }
+ }
+
+ setState(759);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationTypeDeclarationContext extends ParserRuleContext {
+ public TerminalNode AT() { return getToken(JavaParser.AT, 0); }
+ public TerminalNode INTERFACE() { return getToken(JavaParser.INTERFACE, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public AnnotationTypeBodyContext annotationTypeBody() {
+ return getRuleContext(AnnotationTypeBodyContext.class,0);
+ }
+ public AnnotationTypeDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationTypeDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationTypeDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationTypeDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationTypeDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationTypeDeclarationContext annotationTypeDeclaration() throws RecognitionException {
+ AnnotationTypeDeclarationContext _localctx = new AnnotationTypeDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 112, RULE_annotationTypeDeclaration);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(761);
+ match(AT);
+ setState(762);
+ match(INTERFACE);
+ setState(763);
+ match(IDENTIFIER);
+ setState(764);
+ annotationTypeBody();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationTypeBodyContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List annotationTypeElementDeclaration() {
+ return getRuleContexts(AnnotationTypeElementDeclarationContext.class);
+ }
+ public AnnotationTypeElementDeclarationContext annotationTypeElementDeclaration(int i) {
+ return getRuleContext(AnnotationTypeElementDeclarationContext.class,i);
+ }
+ public AnnotationTypeBodyContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationTypeBody; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationTypeBody(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationTypeBody(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationTypeBody(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationTypeBodyContext annotationTypeBody() throws RecognitionException {
+ AnnotationTypeBodyContext _localctx = new AnnotationTypeBodyContext(_ctx, getState());
+ enterRule(_localctx, 114, RULE_annotationTypeBody);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(766);
+ match(LBRACE);
+ setState(770);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << DOUBLE) | (1L << ENUM) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NATIVE) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SYNCHRONIZED) | (1L << TRANSIENT) | (1L << VOLATILE))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (SEMI - 68)) | (1L << (AT - 68)) | (1L << (IDENTIFIER - 68)))) != 0)) {
+ {
+ {
+ setState(767);
+ annotationTypeElementDeclaration();
+ }
+ }
+ setState(772);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(773);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationTypeElementDeclarationContext extends ParserRuleContext {
+ public AnnotationTypeElementRestContext annotationTypeElementRest() {
+ return getRuleContext(AnnotationTypeElementRestContext.class,0);
+ }
+ public List modifier() {
+ return getRuleContexts(ModifierContext.class);
+ }
+ public ModifierContext modifier(int i) {
+ return getRuleContext(ModifierContext.class,i);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public AnnotationTypeElementDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationTypeElementDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationTypeElementDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationTypeElementDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationTypeElementDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationTypeElementDeclarationContext annotationTypeElementDeclaration() throws RecognitionException {
+ AnnotationTypeElementDeclarationContext _localctx = new AnnotationTypeElementDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 116, RULE_annotationTypeElementDeclaration);
+ try {
+ int _alt;
+ setState(783);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case ABSTRACT:
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case CLASS:
+ case DOUBLE:
+ case ENUM:
+ case FINAL:
+ case FLOAT:
+ case INT:
+ case INTERFACE:
+ case LONG:
+ case NATIVE:
+ case PRIVATE:
+ case PROTECTED:
+ case PUBLIC:
+ case SHORT:
+ case STATIC:
+ case STRICTFP:
+ case SYNCHRONIZED:
+ case TRANSIENT:
+ case VOLATILE:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(778);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,86,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(775);
+ modifier();
+ }
+ }
+ }
+ setState(780);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,86,_ctx);
+ }
+ setState(781);
+ annotationTypeElementRest();
+ }
+ break;
+ case SEMI:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(782);
+ match(SEMI);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationTypeElementRestContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public AnnotationMethodOrConstantRestContext annotationMethodOrConstantRest() {
+ return getRuleContext(AnnotationMethodOrConstantRestContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public ClassDeclarationContext classDeclaration() {
+ return getRuleContext(ClassDeclarationContext.class,0);
+ }
+ public InterfaceDeclarationContext interfaceDeclaration() {
+ return getRuleContext(InterfaceDeclarationContext.class,0);
+ }
+ public EnumDeclarationContext enumDeclaration() {
+ return getRuleContext(EnumDeclarationContext.class,0);
+ }
+ public AnnotationTypeDeclarationContext annotationTypeDeclaration() {
+ return getRuleContext(AnnotationTypeDeclarationContext.class,0);
+ }
+ public AnnotationTypeElementRestContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationTypeElementRest; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationTypeElementRest(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationTypeElementRest(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationTypeElementRest(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationTypeElementRestContext annotationTypeElementRest() throws RecognitionException {
+ AnnotationTypeElementRestContext _localctx = new AnnotationTypeElementRestContext(_ctx, getState());
+ enterRule(_localctx, 118, RULE_annotationTypeElementRest);
+ try {
+ setState(805);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(785);
+ typeType();
+ setState(786);
+ annotationMethodOrConstantRest();
+ setState(787);
+ match(SEMI);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(789);
+ classDeclaration();
+ setState(791);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) {
+ case 1:
+ {
+ setState(790);
+ match(SEMI);
+ }
+ break;
+ }
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(793);
+ interfaceDeclaration();
+ setState(795);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) {
+ case 1:
+ {
+ setState(794);
+ match(SEMI);
+ }
+ break;
+ }
+ }
+ break;
+ case 4:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(797);
+ enumDeclaration();
+ setState(799);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) {
+ case 1:
+ {
+ setState(798);
+ match(SEMI);
+ }
+ break;
+ }
+ }
+ break;
+ case 5:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(801);
+ annotationTypeDeclaration();
+ setState(803);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,91,_ctx) ) {
+ case 1:
+ {
+ setState(802);
+ match(SEMI);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationMethodOrConstantRestContext extends ParserRuleContext {
+ public AnnotationMethodRestContext annotationMethodRest() {
+ return getRuleContext(AnnotationMethodRestContext.class,0);
+ }
+ public AnnotationConstantRestContext annotationConstantRest() {
+ return getRuleContext(AnnotationConstantRestContext.class,0);
+ }
+ public AnnotationMethodOrConstantRestContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationMethodOrConstantRest; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationMethodOrConstantRest(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationMethodOrConstantRest(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationMethodOrConstantRest(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationMethodOrConstantRestContext annotationMethodOrConstantRest() throws RecognitionException {
+ AnnotationMethodOrConstantRestContext _localctx = new AnnotationMethodOrConstantRestContext(_ctx, getState());
+ enterRule(_localctx, 120, RULE_annotationMethodOrConstantRest);
+ try {
+ setState(809);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(807);
+ annotationMethodRest();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(808);
+ annotationConstantRest();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationMethodRestContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public DefaultValueContext defaultValue() {
+ return getRuleContext(DefaultValueContext.class,0);
+ }
+ public AnnotationMethodRestContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationMethodRest; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationMethodRest(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationMethodRest(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationMethodRest(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationMethodRestContext annotationMethodRest() throws RecognitionException {
+ AnnotationMethodRestContext _localctx = new AnnotationMethodRestContext(_ctx, getState());
+ enterRule(_localctx, 122, RULE_annotationMethodRest);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(811);
+ match(IDENTIFIER);
+ setState(812);
+ match(LPAREN);
+ setState(813);
+ match(RPAREN);
+ setState(815);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==DEFAULT) {
+ {
+ setState(814);
+ defaultValue();
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AnnotationConstantRestContext extends ParserRuleContext {
+ public VariableDeclaratorsContext variableDeclarators() {
+ return getRuleContext(VariableDeclaratorsContext.class,0);
+ }
+ public AnnotationConstantRestContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_annotationConstantRest; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterAnnotationConstantRest(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitAnnotationConstantRest(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitAnnotationConstantRest(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final AnnotationConstantRestContext annotationConstantRest() throws RecognitionException {
+ AnnotationConstantRestContext _localctx = new AnnotationConstantRestContext(_ctx, getState());
+ enterRule(_localctx, 124, RULE_annotationConstantRest);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(817);
+ variableDeclarators();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class DefaultValueContext extends ParserRuleContext {
+ public TerminalNode DEFAULT() { return getToken(JavaParser.DEFAULT, 0); }
+ public ElementValueContext elementValue() {
+ return getRuleContext(ElementValueContext.class,0);
+ }
+ public DefaultValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_defaultValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterDefaultValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitDefaultValue(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitDefaultValue(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final DefaultValueContext defaultValue() throws RecognitionException {
+ DefaultValueContext _localctx = new DefaultValueContext(_ctx, getState());
+ enterRule(_localctx, 126, RULE_defaultValue);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(819);
+ match(DEFAULT);
+ setState(820);
+ elementValue();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class BlockContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List blockStatement() {
+ return getRuleContexts(BlockStatementContext.class);
+ }
+ public BlockStatementContext blockStatement(int i) {
+ return getRuleContext(BlockStatementContext.class,i);
+ }
+ public BlockContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_block; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterBlock(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitBlock(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitBlock(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final BlockContext block() throws RecognitionException {
+ BlockContext _localctx = new BlockContext(_ctx, getState());
+ enterRule(_localctx, 128, RULE_block);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(822);
+ match(LBRACE);
+ setState(826);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << ASSERT) | (1L << BOOLEAN) | (1L << BREAK) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << CONTINUE) | (1L << DO) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << FOR) | (1L << IF) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NEW) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << RETURN) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SUPER) | (1L << SWITCH) | (1L << SYNCHRONIZED) | (1L << THIS) | (1L << THROW) | (1L << TRY) | (1L << VOID) | (1L << WHILE) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (LBRACE - 64)) | (1L << (SEMI - 64)) | (1L << (LT - 64)) | (1L << (BANG - 64)) | (1L << (TILDE - 64)) | (1L << (INC - 64)) | (1L << (DEC - 64)) | (1L << (ADD - 64)) | (1L << (SUB - 64)) | (1L << (AT - 64)) | (1L << (IDENTIFIER - 64)))) != 0)) {
+ {
+ {
+ setState(823);
+ blockStatement();
+ }
+ }
+ setState(828);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(829);
+ match(RBRACE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class BlockStatementContext extends ParserRuleContext {
+ public LocalVariableDeclarationContext localVariableDeclaration() {
+ return getRuleContext(LocalVariableDeclarationContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public StatementContext statement() {
+ return getRuleContext(StatementContext.class,0);
+ }
+ public LocalTypeDeclarationContext localTypeDeclaration() {
+ return getRuleContext(LocalTypeDeclarationContext.class,0);
+ }
+ public BlockStatementContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_blockStatement; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterBlockStatement(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitBlockStatement(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitBlockStatement(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final BlockStatementContext blockStatement() throws RecognitionException {
+ BlockStatementContext _localctx = new BlockStatementContext(_ctx, getState());
+ enterRule(_localctx, 130, RULE_blockStatement);
+ try {
+ setState(836);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,96,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(831);
+ localVariableDeclaration();
+ setState(832);
+ match(SEMI);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(834);
+ statement();
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(835);
+ localTypeDeclaration();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LocalVariableDeclarationContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public VariableDeclaratorsContext variableDeclarators() {
+ return getRuleContext(VariableDeclaratorsContext.class,0);
+ }
+ public List variableModifier() {
+ return getRuleContexts(VariableModifierContext.class);
+ }
+ public VariableModifierContext variableModifier(int i) {
+ return getRuleContext(VariableModifierContext.class,i);
+ }
+ public LocalVariableDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_localVariableDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLocalVariableDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLocalVariableDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLocalVariableDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LocalVariableDeclarationContext localVariableDeclaration() throws RecognitionException {
+ LocalVariableDeclarationContext _localctx = new LocalVariableDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 132, RULE_localVariableDeclaration);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(841);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,97,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(838);
+ variableModifier();
+ }
+ }
+ }
+ setState(843);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,97,_ctx);
+ }
+ setState(844);
+ typeType();
+ setState(845);
+ variableDeclarators();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LocalTypeDeclarationContext extends ParserRuleContext {
+ public ClassDeclarationContext classDeclaration() {
+ return getRuleContext(ClassDeclarationContext.class,0);
+ }
+ public InterfaceDeclarationContext interfaceDeclaration() {
+ return getRuleContext(InterfaceDeclarationContext.class,0);
+ }
+ public List classOrInterfaceModifier() {
+ return getRuleContexts(ClassOrInterfaceModifierContext.class);
+ }
+ public ClassOrInterfaceModifierContext classOrInterfaceModifier(int i) {
+ return getRuleContext(ClassOrInterfaceModifierContext.class,i);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public LocalTypeDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_localTypeDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLocalTypeDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLocalTypeDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLocalTypeDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LocalTypeDeclarationContext localTypeDeclaration() throws RecognitionException {
+ LocalTypeDeclarationContext _localctx = new LocalTypeDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 134, RULE_localTypeDeclaration);
+ int _la;
+ try {
+ setState(858);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case ABSTRACT:
+ case CLASS:
+ case FINAL:
+ case INTERFACE:
+ case PRIVATE:
+ case PROTECTED:
+ case PUBLIC:
+ case STATIC:
+ case STRICTFP:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(850);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << FINAL) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << STATIC) | (1L << STRICTFP))) != 0) || _la==AT || _la==IDENTIFIER) {
+ {
+ {
+ setState(847);
+ classOrInterfaceModifier();
+ }
+ }
+ setState(852);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(855);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case CLASS:
+ {
+ setState(853);
+ classDeclaration();
+ }
+ break;
+ case INTERFACE:
+ {
+ setState(854);
+ interfaceDeclaration();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ break;
+ case SEMI:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(857);
+ match(SEMI);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class StatementContext extends ParserRuleContext {
+ public BlockContext blockLabel;
+ public ExpressionContext statementExpression;
+ public Token identifierLabel;
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public TerminalNode ASSERT() { return getToken(JavaParser.ASSERT, 0); }
+ public List expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public TerminalNode COLON() { return getToken(JavaParser.COLON, 0); }
+ public TerminalNode IF() { return getToken(JavaParser.IF, 0); }
+ public ParExpressionContext parExpression() {
+ return getRuleContext(ParExpressionContext.class,0);
+ }
+ public List statement() {
+ return getRuleContexts(StatementContext.class);
+ }
+ public StatementContext statement(int i) {
+ return getRuleContext(StatementContext.class,i);
+ }
+ public TerminalNode ELSE() { return getToken(JavaParser.ELSE, 0); }
+ public TerminalNode FOR() { return getToken(JavaParser.FOR, 0); }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public ForControlContext forControl() {
+ return getRuleContext(ForControlContext.class,0);
+ }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public TerminalNode WHILE() { return getToken(JavaParser.WHILE, 0); }
+ public TerminalNode DO() { return getToken(JavaParser.DO, 0); }
+ public TerminalNode TRY() { return getToken(JavaParser.TRY, 0); }
+ public FinallyBlockContext finallyBlock() {
+ return getRuleContext(FinallyBlockContext.class,0);
+ }
+ public List catchClause() {
+ return getRuleContexts(CatchClauseContext.class);
+ }
+ public CatchClauseContext catchClause(int i) {
+ return getRuleContext(CatchClauseContext.class,i);
+ }
+ public ResourceSpecificationContext resourceSpecification() {
+ return getRuleContext(ResourceSpecificationContext.class,0);
+ }
+ public TerminalNode SWITCH() { return getToken(JavaParser.SWITCH, 0); }
+ public TerminalNode LBRACE() { return getToken(JavaParser.LBRACE, 0); }
+ public TerminalNode RBRACE() { return getToken(JavaParser.RBRACE, 0); }
+ public List switchBlockStatementGroup() {
+ return getRuleContexts(SwitchBlockStatementGroupContext.class);
+ }
+ public SwitchBlockStatementGroupContext switchBlockStatementGroup(int i) {
+ return getRuleContext(SwitchBlockStatementGroupContext.class,i);
+ }
+ public List switchLabel() {
+ return getRuleContexts(SwitchLabelContext.class);
+ }
+ public SwitchLabelContext switchLabel(int i) {
+ return getRuleContext(SwitchLabelContext.class,i);
+ }
+ public TerminalNode SYNCHRONIZED() { return getToken(JavaParser.SYNCHRONIZED, 0); }
+ public TerminalNode RETURN() { return getToken(JavaParser.RETURN, 0); }
+ public TerminalNode THROW() { return getToken(JavaParser.THROW, 0); }
+ public TerminalNode BREAK() { return getToken(JavaParser.BREAK, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode CONTINUE() { return getToken(JavaParser.CONTINUE, 0); }
+ public StatementContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_statement; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterStatement(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitStatement(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitStatement(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final StatementContext statement() throws RecognitionException {
+ StatementContext _localctx = new StatementContext(_ctx, getState());
+ enterRule(_localctx, 136, RULE_statement);
+ int _la;
+ try {
+ int _alt;
+ setState(964);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,113,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(860);
+ ((StatementContext)_localctx).blockLabel = block();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(861);
+ match(ASSERT);
+ setState(862);
+ expression(0);
+ setState(865);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COLON) {
+ {
+ setState(863);
+ match(COLON);
+ setState(864);
+ expression(0);
+ }
+ }
+
+ setState(867);
+ match(SEMI);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(869);
+ match(IF);
+ setState(870);
+ parExpression();
+ setState(871);
+ statement();
+ setState(874);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,102,_ctx) ) {
+ case 1:
+ {
+ setState(872);
+ match(ELSE);
+ setState(873);
+ statement();
+ }
+ break;
+ }
+ }
+ break;
+ case 4:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(876);
+ match(FOR);
+ setState(877);
+ match(LPAREN);
+ setState(878);
+ forControl();
+ setState(879);
+ match(RPAREN);
+ setState(880);
+ statement();
+ }
+ break;
+ case 5:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(882);
+ match(WHILE);
+ setState(883);
+ parExpression();
+ setState(884);
+ statement();
+ }
+ break;
+ case 6:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(886);
+ match(DO);
+ setState(887);
+ statement();
+ setState(888);
+ match(WHILE);
+ setState(889);
+ parExpression();
+ setState(890);
+ match(SEMI);
+ }
+ break;
+ case 7:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(892);
+ match(TRY);
+ setState(893);
+ block();
+ setState(903);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case CATCH:
+ {
+ setState(895);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ do {
+ {
+ {
+ setState(894);
+ catchClause();
+ }
+ }
+ setState(897);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ } while ( _la==CATCH );
+ setState(900);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==FINALLY) {
+ {
+ setState(899);
+ finallyBlock();
+ }
+ }
+
+ }
+ break;
+ case FINALLY:
+ {
+ setState(902);
+ finallyBlock();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ break;
+ case 8:
+ enterOuterAlt(_localctx, 8);
+ {
+ setState(905);
+ match(TRY);
+ setState(906);
+ resourceSpecification();
+ setState(907);
+ block();
+ setState(911);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==CATCH) {
+ {
+ {
+ setState(908);
+ catchClause();
+ }
+ }
+ setState(913);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(915);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==FINALLY) {
+ {
+ setState(914);
+ finallyBlock();
+ }
+ }
+
+ }
+ break;
+ case 9:
+ enterOuterAlt(_localctx, 9);
+ {
+ setState(917);
+ match(SWITCH);
+ setState(918);
+ parExpression();
+ setState(919);
+ match(LBRACE);
+ setState(923);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,108,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(920);
+ switchBlockStatementGroup();
+ }
+ }
+ }
+ setState(925);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,108,_ctx);
+ }
+ setState(929);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==CASE || _la==DEFAULT) {
+ {
+ {
+ setState(926);
+ switchLabel();
+ }
+ }
+ setState(931);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(932);
+ match(RBRACE);
+ }
+ break;
+ case 10:
+ enterOuterAlt(_localctx, 10);
+ {
+ setState(934);
+ match(SYNCHRONIZED);
+ setState(935);
+ parExpression();
+ setState(936);
+ block();
+ }
+ break;
+ case 11:
+ enterOuterAlt(_localctx, 11);
+ {
+ setState(938);
+ match(RETURN);
+ setState(940);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(939);
+ expression(0);
+ }
+ }
+
+ setState(942);
+ match(SEMI);
+ }
+ break;
+ case 12:
+ enterOuterAlt(_localctx, 12);
+ {
+ setState(943);
+ match(THROW);
+ setState(944);
+ expression(0);
+ setState(945);
+ match(SEMI);
+ }
+ break;
+ case 13:
+ enterOuterAlt(_localctx, 13);
+ {
+ setState(947);
+ match(BREAK);
+ setState(949);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==IDENTIFIER) {
+ {
+ setState(948);
+ match(IDENTIFIER);
+ }
+ }
+
+ setState(951);
+ match(SEMI);
+ }
+ break;
+ case 14:
+ enterOuterAlt(_localctx, 14);
+ {
+ setState(952);
+ match(CONTINUE);
+ setState(954);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==IDENTIFIER) {
+ {
+ setState(953);
+ match(IDENTIFIER);
+ }
+ }
+
+ setState(956);
+ match(SEMI);
+ }
+ break;
+ case 15:
+ enterOuterAlt(_localctx, 15);
+ {
+ setState(957);
+ match(SEMI);
+ }
+ break;
+ case 16:
+ enterOuterAlt(_localctx, 16);
+ {
+ setState(958);
+ ((StatementContext)_localctx).statementExpression = expression(0);
+ setState(959);
+ match(SEMI);
+ }
+ break;
+ case 17:
+ enterOuterAlt(_localctx, 17);
+ {
+ setState(961);
+ ((StatementContext)_localctx).identifierLabel = match(IDENTIFIER);
+ setState(962);
+ match(COLON);
+ setState(963);
+ statement();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class CatchClauseContext extends ParserRuleContext {
+ public TerminalNode CATCH() { return getToken(JavaParser.CATCH, 0); }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public CatchTypeContext catchType() {
+ return getRuleContext(CatchTypeContext.class,0);
+ }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public List variableModifier() {
+ return getRuleContexts(VariableModifierContext.class);
+ }
+ public VariableModifierContext variableModifier(int i) {
+ return getRuleContext(VariableModifierContext.class,i);
+ }
+ public CatchClauseContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_catchClause; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterCatchClause(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitCatchClause(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitCatchClause(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final CatchClauseContext catchClause() throws RecognitionException {
+ CatchClauseContext _localctx = new CatchClauseContext(_ctx, getState());
+ enterRule(_localctx, 138, RULE_catchClause);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(966);
+ match(CATCH);
+ setState(967);
+ match(LPAREN);
+ setState(971);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,114,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(968);
+ variableModifier();
+ }
+ }
+ }
+ setState(973);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,114,_ctx);
+ }
+ setState(974);
+ catchType();
+ setState(975);
+ match(IDENTIFIER);
+ setState(976);
+ match(RPAREN);
+ setState(977);
+ block();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class CatchTypeContext extends ParserRuleContext {
+ public List qualifiedName() {
+ return getRuleContexts(QualifiedNameContext.class);
+ }
+ public QualifiedNameContext qualifiedName(int i) {
+ return getRuleContext(QualifiedNameContext.class,i);
+ }
+ public List BITOR() { return getTokens(JavaParser.BITOR); }
+ public TerminalNode BITOR(int i) {
+ return getToken(JavaParser.BITOR, i);
+ }
+ public CatchTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_catchType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterCatchType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitCatchType(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitCatchType(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final CatchTypeContext catchType() throws RecognitionException {
+ CatchTypeContext _localctx = new CatchTypeContext(_ctx, getState());
+ enterRule(_localctx, 140, RULE_catchType);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(979);
+ qualifiedName();
+ setState(984);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==BITOR) {
+ {
+ {
+ setState(980);
+ match(BITOR);
+ setState(981);
+ qualifiedName();
+ }
+ }
+ setState(986);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FinallyBlockContext extends ParserRuleContext {
+ public TerminalNode FINALLY() { return getToken(JavaParser.FINALLY, 0); }
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public FinallyBlockContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_finallyBlock; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterFinallyBlock(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitFinallyBlock(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitFinallyBlock(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FinallyBlockContext finallyBlock() throws RecognitionException {
+ FinallyBlockContext _localctx = new FinallyBlockContext(_ctx, getState());
+ enterRule(_localctx, 142, RULE_finallyBlock);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(987);
+ match(FINALLY);
+ setState(988);
+ block();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ResourceSpecificationContext extends ParserRuleContext {
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public ResourcesContext resources() {
+ return getRuleContext(ResourcesContext.class,0);
+ }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public TerminalNode SEMI() { return getToken(JavaParser.SEMI, 0); }
+ public ResourceSpecificationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_resourceSpecification; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterResourceSpecification(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitResourceSpecification(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitResourceSpecification(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ResourceSpecificationContext resourceSpecification() throws RecognitionException {
+ ResourceSpecificationContext _localctx = new ResourceSpecificationContext(_ctx, getState());
+ enterRule(_localctx, 144, RULE_resourceSpecification);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(990);
+ match(LPAREN);
+ setState(991);
+ resources();
+ setState(993);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==SEMI) {
+ {
+ setState(992);
+ match(SEMI);
+ }
+ }
+
+ setState(995);
+ match(RPAREN);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ResourcesContext extends ParserRuleContext {
+ public List resource() {
+ return getRuleContexts(ResourceContext.class);
+ }
+ public ResourceContext resource(int i) {
+ return getRuleContext(ResourceContext.class,i);
+ }
+ public List SEMI() { return getTokens(JavaParser.SEMI); }
+ public TerminalNode SEMI(int i) {
+ return getToken(JavaParser.SEMI, i);
+ }
+ public ResourcesContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_resources; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterResources(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitResources(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitResources(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ResourcesContext resources() throws RecognitionException {
+ ResourcesContext _localctx = new ResourcesContext(_ctx, getState());
+ enterRule(_localctx, 146, RULE_resources);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(997);
+ resource();
+ setState(1002);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,117,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(998);
+ match(SEMI);
+ setState(999);
+ resource();
+ }
+ }
+ }
+ setState(1004);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,117,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ResourceContext extends ParserRuleContext {
+ public ClassOrInterfaceTypeContext classOrInterfaceType() {
+ return getRuleContext(ClassOrInterfaceTypeContext.class,0);
+ }
+ public VariableDeclaratorIdContext variableDeclaratorId() {
+ return getRuleContext(VariableDeclaratorIdContext.class,0);
+ }
+ public TerminalNode ASSIGN() { return getToken(JavaParser.ASSIGN, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public List variableModifier() {
+ return getRuleContexts(VariableModifierContext.class);
+ }
+ public VariableModifierContext variableModifier(int i) {
+ return getRuleContext(VariableModifierContext.class,i);
+ }
+ public ResourceContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_resource; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterResource(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitResource(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitResource(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ResourceContext resource() throws RecognitionException {
+ ResourceContext _localctx = new ResourceContext(_ctx, getState());
+ enterRule(_localctx, 148, RULE_resource);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1008);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,118,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1005);
+ variableModifier();
+ }
+ }
+ }
+ setState(1010);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,118,_ctx);
+ }
+ setState(1011);
+ classOrInterfaceType();
+ setState(1012);
+ variableDeclaratorId();
+ setState(1013);
+ match(ASSIGN);
+ setState(1014);
+ expression(0);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SwitchBlockStatementGroupContext extends ParserRuleContext {
+ public List switchLabel() {
+ return getRuleContexts(SwitchLabelContext.class);
+ }
+ public SwitchLabelContext switchLabel(int i) {
+ return getRuleContext(SwitchLabelContext.class,i);
+ }
+ public List blockStatement() {
+ return getRuleContexts(BlockStatementContext.class);
+ }
+ public BlockStatementContext blockStatement(int i) {
+ return getRuleContext(BlockStatementContext.class,i);
+ }
+ public SwitchBlockStatementGroupContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_switchBlockStatementGroup; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterSwitchBlockStatementGroup(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitSwitchBlockStatementGroup(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitSwitchBlockStatementGroup(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final SwitchBlockStatementGroupContext switchBlockStatementGroup() throws RecognitionException {
+ SwitchBlockStatementGroupContext _localctx = new SwitchBlockStatementGroupContext(_ctx, getState());
+ enterRule(_localctx, 150, RULE_switchBlockStatementGroup);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1017);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ do {
+ {
+ {
+ setState(1016);
+ switchLabel();
+ }
+ }
+ setState(1019);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ } while ( _la==CASE || _la==DEFAULT );
+ setState(1022);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ do {
+ {
+ {
+ setState(1021);
+ blockStatement();
+ }
+ }
+ setState(1024);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABSTRACT) | (1L << ASSERT) | (1L << BOOLEAN) | (1L << BREAK) | (1L << BYTE) | (1L << CHAR) | (1L << CLASS) | (1L << CONTINUE) | (1L << DO) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << FOR) | (1L << IF) | (1L << INT) | (1L << INTERFACE) | (1L << LONG) | (1L << NEW) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << RETURN) | (1L << SHORT) | (1L << STATIC) | (1L << STRICTFP) | (1L << SUPER) | (1L << SWITCH) | (1L << SYNCHRONIZED) | (1L << THIS) | (1L << THROW) | (1L << TRY) | (1L << VOID) | (1L << WHILE) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (LBRACE - 64)) | (1L << (SEMI - 64)) | (1L << (LT - 64)) | (1L << (BANG - 64)) | (1L << (TILDE - 64)) | (1L << (INC - 64)) | (1L << (DEC - 64)) | (1L << (ADD - 64)) | (1L << (SUB - 64)) | (1L << (AT - 64)) | (1L << (IDENTIFIER - 64)))) != 0) );
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SwitchLabelContext extends ParserRuleContext {
+ public ExpressionContext constantExpression;
+ public Token enumConstantName;
+ public TerminalNode CASE() { return getToken(JavaParser.CASE, 0); }
+ public TerminalNode COLON() { return getToken(JavaParser.COLON, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode DEFAULT() { return getToken(JavaParser.DEFAULT, 0); }
+ public SwitchLabelContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_switchLabel; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterSwitchLabel(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitSwitchLabel(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitSwitchLabel(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final SwitchLabelContext switchLabel() throws RecognitionException {
+ SwitchLabelContext _localctx = new SwitchLabelContext(_ctx, getState());
+ enterRule(_localctx, 152, RULE_switchLabel);
+ try {
+ setState(1034);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case CASE:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1026);
+ match(CASE);
+ setState(1029);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,121,_ctx) ) {
+ case 1:
+ {
+ setState(1027);
+ ((SwitchLabelContext)_localctx).constantExpression = expression(0);
+ }
+ break;
+ case 2:
+ {
+ setState(1028);
+ ((SwitchLabelContext)_localctx).enumConstantName = match(IDENTIFIER);
+ }
+ break;
+ }
+ setState(1031);
+ match(COLON);
+ }
+ break;
+ case DEFAULT:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1032);
+ match(DEFAULT);
+ setState(1033);
+ match(COLON);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ForControlContext extends ParserRuleContext {
+ public ExpressionListContext forUpdate;
+ public EnhancedForControlContext enhancedForControl() {
+ return getRuleContext(EnhancedForControlContext.class,0);
+ }
+ public List SEMI() { return getTokens(JavaParser.SEMI); }
+ public TerminalNode SEMI(int i) {
+ return getToken(JavaParser.SEMI, i);
+ }
+ public ForInitContext forInit() {
+ return getRuleContext(ForInitContext.class,0);
+ }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public ExpressionListContext expressionList() {
+ return getRuleContext(ExpressionListContext.class,0);
+ }
+ public ForControlContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_forControl; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterForControl(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitForControl(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitForControl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ForControlContext forControl() throws RecognitionException {
+ ForControlContext _localctx = new ForControlContext(_ctx, getState());
+ enterRule(_localctx, 154, RULE_forControl);
+ int _la;
+ try {
+ setState(1048);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1036);
+ enhancedForControl();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1038);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(1037);
+ forInit();
+ }
+ }
+
+ setState(1040);
+ match(SEMI);
+ setState(1042);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(1041);
+ expression(0);
+ }
+ }
+
+ setState(1044);
+ match(SEMI);
+ setState(1046);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(1045);
+ ((ForControlContext)_localctx).forUpdate = expressionList();
+ }
+ }
+
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ForInitContext extends ParserRuleContext {
+ public LocalVariableDeclarationContext localVariableDeclaration() {
+ return getRuleContext(LocalVariableDeclarationContext.class,0);
+ }
+ public ExpressionListContext expressionList() {
+ return getRuleContext(ExpressionListContext.class,0);
+ }
+ public ForInitContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_forInit; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterForInit(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitForInit(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitForInit(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ForInitContext forInit() throws RecognitionException {
+ ForInitContext _localctx = new ForInitContext(_ctx, getState());
+ enterRule(_localctx, 156, RULE_forInit);
+ try {
+ setState(1052);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1050);
+ localVariableDeclaration();
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1051);
+ expressionList();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class EnhancedForControlContext extends ParserRuleContext {
+ public TypeTypeContext typeType() {
+ return getRuleContext(TypeTypeContext.class,0);
+ }
+ public VariableDeclaratorIdContext variableDeclaratorId() {
+ return getRuleContext(VariableDeclaratorIdContext.class,0);
+ }
+ public TerminalNode COLON() { return getToken(JavaParser.COLON, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public List variableModifier() {
+ return getRuleContexts(VariableModifierContext.class);
+ }
+ public VariableModifierContext variableModifier(int i) {
+ return getRuleContext(VariableModifierContext.class,i);
+ }
+ public EnhancedForControlContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_enhancedForControl; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterEnhancedForControl(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitEnhancedForControl(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitEnhancedForControl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final EnhancedForControlContext enhancedForControl() throws RecognitionException {
+ EnhancedForControlContext _localctx = new EnhancedForControlContext(_ctx, getState());
+ enterRule(_localctx, 158, RULE_enhancedForControl);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1057);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,128,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1054);
+ variableModifier();
+ }
+ }
+ }
+ setState(1059);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,128,_ctx);
+ }
+ setState(1060);
+ typeType();
+ setState(1061);
+ variableDeclaratorId();
+ setState(1062);
+ match(COLON);
+ setState(1063);
+ expression(0);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ParExpressionContext extends ParserRuleContext {
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public ParExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_parExpression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterParExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitParExpression(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitParExpression(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ParExpressionContext parExpression() throws RecognitionException {
+ ParExpressionContext _localctx = new ParExpressionContext(_ctx, getState());
+ enterRule(_localctx, 160, RULE_parExpression);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1065);
+ match(LPAREN);
+ setState(1066);
+ expression(0);
+ setState(1067);
+ match(RPAREN);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ExpressionListContext extends ParserRuleContext {
+ public List expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public ExpressionListContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_expressionList; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterExpressionList(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitExpressionList(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitExpressionList(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ExpressionListContext expressionList() throws RecognitionException {
+ ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState());
+ enterRule(_localctx, 162, RULE_expressionList);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1069);
+ expression(0);
+ setState(1074);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(1070);
+ match(COMMA);
+ setState(1071);
+ expression(0);
+ }
+ }
+ setState(1076);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class MethodCallContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public ExpressionListContext expressionList() {
+ return getRuleContext(ExpressionListContext.class,0);
+ }
+ public TerminalNode THIS() { return getToken(JavaParser.THIS, 0); }
+ public TerminalNode SUPER() { return getToken(JavaParser.SUPER, 0); }
+ public MethodCallContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_methodCall; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterMethodCall(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitMethodCall(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitMethodCall(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final MethodCallContext methodCall() throws RecognitionException {
+ MethodCallContext _localctx = new MethodCallContext(_ctx, getState());
+ enterRule(_localctx, 164, RULE_methodCall);
+ int _la;
+ try {
+ setState(1095);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1077);
+ match(IDENTIFIER);
+ setState(1078);
+ match(LPAREN);
+ setState(1080);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(1079);
+ expressionList();
+ }
+ }
+
+ setState(1082);
+ match(RPAREN);
+ }
+ break;
+ case THIS:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1083);
+ match(THIS);
+ setState(1084);
+ match(LPAREN);
+ setState(1086);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(1085);
+ expressionList();
+ }
+ }
+
+ setState(1088);
+ match(RPAREN);
+ }
+ break;
+ case SUPER:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(1089);
+ match(SUPER);
+ setState(1090);
+ match(LPAREN);
+ setState(1092);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << NEW) | (1L << SHORT) | (1L << SUPER) | (1L << THIS) | (1L << VOID) | (1L << DECIMAL_LITERAL) | (1L << HEX_LITERAL) | (1L << OCT_LITERAL) | (1L << BINARY_LITERAL) | (1L << FLOAT_LITERAL) | (1L << HEX_FLOAT_LITERAL) | (1L << BOOL_LITERAL) | (1L << CHAR_LITERAL) | (1L << STRING_LITERAL) | (1L << NULL_LITERAL) | (1L << LPAREN))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (LT - 73)) | (1L << (BANG - 73)) | (1L << (TILDE - 73)) | (1L << (INC - 73)) | (1L << (DEC - 73)) | (1L << (ADD - 73)) | (1L << (SUB - 73)) | (1L << (AT - 73)) | (1L << (IDENTIFIER - 73)))) != 0)) {
+ {
+ setState(1091);
+ expressionList();
+ }
+ }
+
+ setState(1094);
+ match(RPAREN);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ExpressionContext extends ParserRuleContext {
+ public Token prefix;
+ public Token bop;
+ public Token postfix;
+ public PrimaryContext primary() {
+ return getRuleContext(PrimaryContext.class,0);
+ }
+ public MethodCallContext methodCall() {
+ return getRuleContext(MethodCallContext.class,0);
+ }
+ public TerminalNode NEW() { return getToken(JavaParser.NEW, 0); }
+ public CreatorContext creator() {
+ return getRuleContext(CreatorContext.class,0);
+ }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public List typeType() {
+ return getRuleContexts(TypeTypeContext.class);
+ }
+ public TypeTypeContext typeType(int i) {
+ return getRuleContext(TypeTypeContext.class,i);
+ }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public List expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public List BITAND() { return getTokens(JavaParser.BITAND); }
+ public TerminalNode BITAND(int i) {
+ return getToken(JavaParser.BITAND, i);
+ }
+ public TerminalNode ADD() { return getToken(JavaParser.ADD, 0); }
+ public TerminalNode SUB() { return getToken(JavaParser.SUB, 0); }
+ public TerminalNode INC() { return getToken(JavaParser.INC, 0); }
+ public TerminalNode DEC() { return getToken(JavaParser.DEC, 0); }
+ public TerminalNode TILDE() { return getToken(JavaParser.TILDE, 0); }
+ public TerminalNode BANG() { return getToken(JavaParser.BANG, 0); }
+ public LambdaExpressionContext lambdaExpression() {
+ return getRuleContext(LambdaExpressionContext.class,0);
+ }
+ public TerminalNode COLONCOLON() { return getToken(JavaParser.COLONCOLON, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TypeArgumentsContext typeArguments() {
+ return getRuleContext(TypeArgumentsContext.class,0);
+ }
+ public ClassTypeContext classType() {
+ return getRuleContext(ClassTypeContext.class,0);
+ }
+ public TerminalNode MUL() { return getToken(JavaParser.MUL, 0); }
+ public TerminalNode DIV() { return getToken(JavaParser.DIV, 0); }
+ public TerminalNode MOD() { return getToken(JavaParser.MOD, 0); }
+ public List LT() { return getTokens(JavaParser.LT); }
+ public TerminalNode LT(int i) {
+ return getToken(JavaParser.LT, i);
+ }
+ public List GT() { return getTokens(JavaParser.GT); }
+ public TerminalNode GT(int i) {
+ return getToken(JavaParser.GT, i);
+ }
+ public TerminalNode LE() { return getToken(JavaParser.LE, 0); }
+ public TerminalNode GE() { return getToken(JavaParser.GE, 0); }
+ public TerminalNode EQUAL() { return getToken(JavaParser.EQUAL, 0); }
+ public TerminalNode NOTEQUAL() { return getToken(JavaParser.NOTEQUAL, 0); }
+ public TerminalNode CARET() { return getToken(JavaParser.CARET, 0); }
+ public TerminalNode BITOR() { return getToken(JavaParser.BITOR, 0); }
+ public TerminalNode AND() { return getToken(JavaParser.AND, 0); }
+ public TerminalNode OR() { return getToken(JavaParser.OR, 0); }
+ public TerminalNode COLON() { return getToken(JavaParser.COLON, 0); }
+ public TerminalNode QUESTION() { return getToken(JavaParser.QUESTION, 0); }
+ public TerminalNode ASSIGN() { return getToken(JavaParser.ASSIGN, 0); }
+ public TerminalNode ADD_ASSIGN() { return getToken(JavaParser.ADD_ASSIGN, 0); }
+ public TerminalNode SUB_ASSIGN() { return getToken(JavaParser.SUB_ASSIGN, 0); }
+ public TerminalNode MUL_ASSIGN() { return getToken(JavaParser.MUL_ASSIGN, 0); }
+ public TerminalNode DIV_ASSIGN() { return getToken(JavaParser.DIV_ASSIGN, 0); }
+ public TerminalNode AND_ASSIGN() { return getToken(JavaParser.AND_ASSIGN, 0); }
+ public TerminalNode OR_ASSIGN() { return getToken(JavaParser.OR_ASSIGN, 0); }
+ public TerminalNode XOR_ASSIGN() { return getToken(JavaParser.XOR_ASSIGN, 0); }
+ public TerminalNode RSHIFT_ASSIGN() { return getToken(JavaParser.RSHIFT_ASSIGN, 0); }
+ public TerminalNode URSHIFT_ASSIGN() { return getToken(JavaParser.URSHIFT_ASSIGN, 0); }
+ public TerminalNode LSHIFT_ASSIGN() { return getToken(JavaParser.LSHIFT_ASSIGN, 0); }
+ public TerminalNode MOD_ASSIGN() { return getToken(JavaParser.MOD_ASSIGN, 0); }
+ public TerminalNode DOT() { return getToken(JavaParser.DOT, 0); }
+ public TerminalNode THIS() { return getToken(JavaParser.THIS, 0); }
+ public InnerCreatorContext innerCreator() {
+ return getRuleContext(InnerCreatorContext.class,0);
+ }
+ public TerminalNode SUPER() { return getToken(JavaParser.SUPER, 0); }
+ public SuperSuffixContext superSuffix() {
+ return getRuleContext(SuperSuffixContext.class,0);
+ }
+ public ExplicitGenericInvocationContext explicitGenericInvocation() {
+ return getRuleContext(ExplicitGenericInvocationContext.class,0);
+ }
+ public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() {
+ return getRuleContext(NonWildcardTypeArgumentsContext.class,0);
+ }
+ public TerminalNode LBRACK() { return getToken(JavaParser.LBRACK, 0); }
+ public TerminalNode RBRACK() { return getToken(JavaParser.RBRACK, 0); }
+ public TerminalNode INSTANCEOF() { return getToken(JavaParser.INSTANCEOF, 0); }
+ public ExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_expression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitExpression(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitExpression(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ExpressionContext expression() throws RecognitionException {
+ return expression(0);
+ }
+
+ private ExpressionContext expression(int _p) throws RecognitionException {
+ ParserRuleContext _parentctx = _ctx;
+ int _parentState = getState();
+ ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
+ ExpressionContext _prevctx = _localctx;
+ int _startState = 166;
+ enterRecursionRule(_localctx, 166, RULE_expression, _p);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1141);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,139,_ctx) ) {
+ case 1:
+ {
+ setState(1098);
+ primary();
+ }
+ break;
+ case 2:
+ {
+ setState(1099);
+ methodCall();
+ }
+ break;
+ case 3:
+ {
+ setState(1100);
+ match(NEW);
+ setState(1101);
+ creator();
+ }
+ break;
+ case 4:
+ {
+ setState(1102);
+ match(LPAREN);
+ setState(1106);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,134,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1103);
+ annotation();
+ }
+ }
+ }
+ setState(1108);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,134,_ctx);
+ }
+ setState(1109);
+ typeType();
+ setState(1114);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==BITAND) {
+ {
+ {
+ setState(1110);
+ match(BITAND);
+ setState(1111);
+ typeType();
+ }
+ }
+ setState(1116);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(1117);
+ match(RPAREN);
+ setState(1118);
+ expression(21);
+ }
+ break;
+ case 5:
+ {
+ setState(1120);
+ ((ExpressionContext)_localctx).prefix = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (INC - 84)) | (1L << (DEC - 84)) | (1L << (ADD - 84)) | (1L << (SUB - 84)))) != 0)) ) {
+ ((ExpressionContext)_localctx).prefix = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1121);
+ expression(19);
+ }
+ break;
+ case 6:
+ {
+ setState(1122);
+ ((ExpressionContext)_localctx).prefix = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(_la==BANG || _la==TILDE) ) {
+ ((ExpressionContext)_localctx).prefix = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1123);
+ expression(18);
+ }
+ break;
+ case 7:
+ {
+ setState(1124);
+ lambdaExpression();
+ }
+ break;
+ case 8:
+ {
+ setState(1125);
+ typeType();
+ setState(1126);
+ match(COLONCOLON);
+ setState(1132);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case LT:
+ case IDENTIFIER:
+ {
+ setState(1128);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1127);
+ typeArguments();
+ }
+ }
+
+ setState(1130);
+ match(IDENTIFIER);
+ }
+ break;
+ case NEW:
+ {
+ setState(1131);
+ match(NEW);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ break;
+ case 9:
+ {
+ setState(1134);
+ classType();
+ setState(1135);
+ match(COLONCOLON);
+ setState(1137);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1136);
+ typeArguments();
+ }
+ }
+
+ setState(1139);
+ match(NEW);
+ }
+ break;
+ }
+ _ctx.stop = _input.LT(-1);
+ setState(1223);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,145,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ if ( _parseListeners!=null ) triggerExitRuleEvent();
+ _prevctx = _localctx;
+ {
+ setState(1221);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,144,_ctx) ) {
+ case 1:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1143);
+ if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
+ setState(1144);
+ ((ExpressionContext)_localctx).bop = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(((((_la - 88)) & ~0x3f) == 0 && ((1L << (_la - 88)) & ((1L << (MUL - 88)) | (1L << (DIV - 88)) | (1L << (MOD - 88)))) != 0)) ) {
+ ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1145);
+ expression(18);
+ }
+ break;
+ case 2:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1146);
+ if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
+ setState(1147);
+ ((ExpressionContext)_localctx).bop = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(_la==ADD || _la==SUB) ) {
+ ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1148);
+ expression(17);
+ }
+ break;
+ case 3:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1149);
+ if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
+ setState(1157);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,140,_ctx) ) {
+ case 1:
+ {
+ setState(1150);
+ match(LT);
+ setState(1151);
+ match(LT);
+ }
+ break;
+ case 2:
+ {
+ setState(1152);
+ match(GT);
+ setState(1153);
+ match(GT);
+ setState(1154);
+ match(GT);
+ }
+ break;
+ case 3:
+ {
+ setState(1155);
+ match(GT);
+ setState(1156);
+ match(GT);
+ }
+ break;
+ }
+ setState(1159);
+ expression(16);
+ }
+ break;
+ case 4:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1160);
+ if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
+ setState(1161);
+ ((ExpressionContext)_localctx).bop = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (GT - 72)) | (1L << (LT - 72)) | (1L << (LE - 72)) | (1L << (GE - 72)))) != 0)) ) {
+ ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1162);
+ expression(15);
+ }
+ break;
+ case 5:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1163);
+ if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
+ setState(1164);
+ ((ExpressionContext)_localctx).bop = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(_la==EQUAL || _la==NOTEQUAL) ) {
+ ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1165);
+ expression(13);
+ }
+ break;
+ case 6:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1166);
+ if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
+ setState(1167);
+ ((ExpressionContext)_localctx).bop = match(BITAND);
+ setState(1168);
+ expression(12);
+ }
+ break;
+ case 7:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1169);
+ if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
+ setState(1170);
+ ((ExpressionContext)_localctx).bop = match(CARET);
+ setState(1171);
+ expression(11);
+ }
+ break;
+ case 8:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1172);
+ if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
+ setState(1173);
+ ((ExpressionContext)_localctx).bop = match(BITOR);
+ setState(1174);
+ expression(10);
+ }
+ break;
+ case 9:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1175);
+ if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
+ setState(1176);
+ ((ExpressionContext)_localctx).bop = match(AND);
+ setState(1177);
+ expression(9);
+ }
+ break;
+ case 10:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1178);
+ if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
+ setState(1179);
+ ((ExpressionContext)_localctx).bop = match(OR);
+ setState(1180);
+ expression(8);
+ }
+ break;
+ case 11:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1181);
+ if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
+ setState(1182);
+ ((ExpressionContext)_localctx).bop = match(QUESTION);
+ setState(1183);
+ expression(0);
+ setState(1184);
+ match(COLON);
+ setState(1185);
+ expression(6);
+ }
+ break;
+ case 12:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1187);
+ if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
+ setState(1188);
+ ((ExpressionContext)_localctx).bop = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (ASSIGN - 71)) | (1L << (ADD_ASSIGN - 71)) | (1L << (SUB_ASSIGN - 71)) | (1L << (MUL_ASSIGN - 71)) | (1L << (DIV_ASSIGN - 71)) | (1L << (AND_ASSIGN - 71)) | (1L << (OR_ASSIGN - 71)) | (1L << (XOR_ASSIGN - 71)) | (1L << (MOD_ASSIGN - 71)) | (1L << (LSHIFT_ASSIGN - 71)) | (1L << (RSHIFT_ASSIGN - 71)) | (1L << (URSHIFT_ASSIGN - 71)))) != 0)) ) {
+ ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ setState(1189);
+ expression(5);
+ }
+ break;
+ case 13:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1190);
+ if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)");
+ setState(1191);
+ ((ExpressionContext)_localctx).bop = match(DOT);
+ setState(1203);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,142,_ctx) ) {
+ case 1:
+ {
+ setState(1192);
+ match(IDENTIFIER);
+ }
+ break;
+ case 2:
+ {
+ setState(1193);
+ methodCall();
+ }
+ break;
+ case 3:
+ {
+ setState(1194);
+ match(THIS);
+ }
+ break;
+ case 4:
+ {
+ setState(1195);
+ match(NEW);
+ setState(1197);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1196);
+ nonWildcardTypeArguments();
+ }
+ }
+
+ setState(1199);
+ innerCreator();
+ }
+ break;
+ case 5:
+ {
+ setState(1200);
+ match(SUPER);
+ setState(1201);
+ superSuffix();
+ }
+ break;
+ case 6:
+ {
+ setState(1202);
+ explicitGenericInvocation();
+ }
+ break;
+ }
+ }
+ break;
+ case 14:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1205);
+ if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)");
+ setState(1206);
+ match(LBRACK);
+ setState(1207);
+ expression(0);
+ setState(1208);
+ match(RBRACK);
+ }
+ break;
+ case 15:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1210);
+ if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
+ setState(1211);
+ ((ExpressionContext)_localctx).postfix = _input.LT(1);
+ _la = _input.LA(1);
+ if ( !(_la==INC || _la==DEC) ) {
+ ((ExpressionContext)_localctx).postfix = (Token)_errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ break;
+ case 16:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1212);
+ if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
+ setState(1213);
+ ((ExpressionContext)_localctx).bop = match(INSTANCEOF);
+ setState(1214);
+ typeType();
+ }
+ break;
+ case 17:
+ {
+ _localctx = new ExpressionContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expression);
+ setState(1215);
+ if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
+ setState(1216);
+ match(COLONCOLON);
+ setState(1218);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1217);
+ typeArguments();
+ }
+ }
+
+ setState(1220);
+ match(IDENTIFIER);
+ }
+ break;
+ }
+ }
+ }
+ setState(1225);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,145,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ unrollRecursionContexts(_parentctx);
+ }
+ return _localctx;
+ }
+
+ public static class LambdaExpressionContext extends ParserRuleContext {
+ public LambdaParametersContext lambdaParameters() {
+ return getRuleContext(LambdaParametersContext.class,0);
+ }
+ public TerminalNode ARROW() { return getToken(JavaParser.ARROW, 0); }
+ public LambdaBodyContext lambdaBody() {
+ return getRuleContext(LambdaBodyContext.class,0);
+ }
+ public LambdaExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_lambdaExpression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLambdaExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLambdaExpression(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLambdaExpression(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LambdaExpressionContext lambdaExpression() throws RecognitionException {
+ LambdaExpressionContext _localctx = new LambdaExpressionContext(_ctx, getState());
+ enterRule(_localctx, 168, RULE_lambdaExpression);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1226);
+ lambdaParameters();
+ setState(1227);
+ match(ARROW);
+ setState(1228);
+ lambdaBody();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LambdaParametersContext extends ParserRuleContext {
+ public List IDENTIFIER() { return getTokens(JavaParser.IDENTIFIER); }
+ public TerminalNode IDENTIFIER(int i) {
+ return getToken(JavaParser.IDENTIFIER, i);
+ }
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public FormalParameterListContext formalParameterList() {
+ return getRuleContext(FormalParameterListContext.class,0);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public LambdaParametersContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_lambdaParameters; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLambdaParameters(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLambdaParameters(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLambdaParameters(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LambdaParametersContext lambdaParameters() throws RecognitionException {
+ LambdaParametersContext _localctx = new LambdaParametersContext(_ctx, getState());
+ enterRule(_localctx, 170, RULE_lambdaParameters);
+ int _la;
+ try {
+ setState(1246);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1230);
+ match(IDENTIFIER);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1231);
+ match(LPAREN);
+ setState(1233);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FINAL) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << SHORT))) != 0) || _la==AT || _la==IDENTIFIER) {
+ {
+ setState(1232);
+ formalParameterList();
+ }
+ }
+
+ setState(1235);
+ match(RPAREN);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(1236);
+ match(LPAREN);
+ setState(1237);
+ match(IDENTIFIER);
+ setState(1242);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(1238);
+ match(COMMA);
+ setState(1239);
+ match(IDENTIFIER);
+ }
+ }
+ setState(1244);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(1245);
+ match(RPAREN);
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LambdaBodyContext extends ParserRuleContext {
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public LambdaBodyContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_lambdaBody; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterLambdaBody(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitLambdaBody(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitLambdaBody(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LambdaBodyContext lambdaBody() throws RecognitionException {
+ LambdaBodyContext _localctx = new LambdaBodyContext(_ctx, getState());
+ enterRule(_localctx, 172, RULE_lambdaBody);
+ try {
+ setState(1250);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case NEW:
+ case SHORT:
+ case SUPER:
+ case THIS:
+ case VOID:
+ case DECIMAL_LITERAL:
+ case HEX_LITERAL:
+ case OCT_LITERAL:
+ case BINARY_LITERAL:
+ case FLOAT_LITERAL:
+ case HEX_FLOAT_LITERAL:
+ case BOOL_LITERAL:
+ case CHAR_LITERAL:
+ case STRING_LITERAL:
+ case NULL_LITERAL:
+ case LPAREN:
+ case LT:
+ case BANG:
+ case TILDE:
+ case INC:
+ case DEC:
+ case ADD:
+ case SUB:
+ case AT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1248);
+ expression(0);
+ }
+ break;
+ case LBRACE:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1249);
+ block();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class PrimaryContext extends ParserRuleContext {
+ public TerminalNode LPAREN() { return getToken(JavaParser.LPAREN, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public TerminalNode RPAREN() { return getToken(JavaParser.RPAREN, 0); }
+ public TerminalNode THIS() { return getToken(JavaParser.THIS, 0); }
+ public TerminalNode SUPER() { return getToken(JavaParser.SUPER, 0); }
+ public LiteralContext literal() {
+ return getRuleContext(LiteralContext.class,0);
+ }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public TypeTypeOrVoidContext typeTypeOrVoid() {
+ return getRuleContext(TypeTypeOrVoidContext.class,0);
+ }
+ public TerminalNode DOT() { return getToken(JavaParser.DOT, 0); }
+ public TerminalNode CLASS() { return getToken(JavaParser.CLASS, 0); }
+ public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() {
+ return getRuleContext(NonWildcardTypeArgumentsContext.class,0);
+ }
+ public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() {
+ return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0);
+ }
+ public ArgumentsContext arguments() {
+ return getRuleContext(ArgumentsContext.class,0);
+ }
+ public PrimaryContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_primary; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterPrimary(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitPrimary(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitPrimary(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final PrimaryContext primary() throws RecognitionException {
+ PrimaryContext _localctx = new PrimaryContext(_ctx, getState());
+ enterRule(_localctx, 174, RULE_primary);
+ try {
+ setState(1270);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,151,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1252);
+ match(LPAREN);
+ setState(1253);
+ expression(0);
+ setState(1254);
+ match(RPAREN);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1256);
+ match(THIS);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(1257);
+ match(SUPER);
+ }
+ break;
+ case 4:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(1258);
+ literal();
+ }
+ break;
+ case 5:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(1259);
+ match(IDENTIFIER);
+ }
+ break;
+ case 6:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(1260);
+ typeTypeOrVoid();
+ setState(1261);
+ match(DOT);
+ setState(1262);
+ match(CLASS);
+ }
+ break;
+ case 7:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(1264);
+ nonWildcardTypeArguments();
+ setState(1268);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case SUPER:
+ case IDENTIFIER:
+ {
+ setState(1265);
+ explicitGenericInvocationSuffix();
+ }
+ break;
+ case THIS:
+ {
+ setState(1266);
+ match(THIS);
+ setState(1267);
+ arguments();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassTypeContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public ClassOrInterfaceTypeContext classOrInterfaceType() {
+ return getRuleContext(ClassOrInterfaceTypeContext.class,0);
+ }
+ public TerminalNode DOT() { return getToken(JavaParser.DOT, 0); }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public TypeArgumentsContext typeArguments() {
+ return getRuleContext(TypeArgumentsContext.class,0);
+ }
+ public ClassTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassType(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassType(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassTypeContext classType() throws RecognitionException {
+ ClassTypeContext _localctx = new ClassTypeContext(_ctx, getState());
+ enterRule(_localctx, 176, RULE_classType);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1275);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) {
+ case 1:
+ {
+ setState(1272);
+ classOrInterfaceType();
+ setState(1273);
+ match(DOT);
+ }
+ break;
+ }
+ setState(1280);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,153,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1277);
+ annotation();
+ }
+ }
+ }
+ setState(1282);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,153,_ctx);
+ }
+ setState(1283);
+ match(IDENTIFIER);
+ setState(1285);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1284);
+ typeArguments();
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class CreatorContext extends ParserRuleContext {
+ public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() {
+ return getRuleContext(NonWildcardTypeArgumentsContext.class,0);
+ }
+ public CreatedNameContext createdName() {
+ return getRuleContext(CreatedNameContext.class,0);
+ }
+ public ClassCreatorRestContext classCreatorRest() {
+ return getRuleContext(ClassCreatorRestContext.class,0);
+ }
+ public ArrayCreatorRestContext arrayCreatorRest() {
+ return getRuleContext(ArrayCreatorRestContext.class,0);
+ }
+ public CreatorContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_creator; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterCreator(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitCreator(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitCreator(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final CreatorContext creator() throws RecognitionException {
+ CreatorContext _localctx = new CreatorContext(_ctx, getState());
+ enterRule(_localctx, 178, RULE_creator);
+ try {
+ setState(1296);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case LT:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1287);
+ nonWildcardTypeArguments();
+ setState(1288);
+ createdName();
+ setState(1289);
+ classCreatorRest();
+ }
+ break;
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case SHORT:
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1291);
+ createdName();
+ setState(1294);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case LBRACK:
+ {
+ setState(1292);
+ arrayCreatorRest();
+ }
+ break;
+ case LPAREN:
+ {
+ setState(1293);
+ classCreatorRest();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class CreatedNameContext extends ParserRuleContext {
+ public List IDENTIFIER() { return getTokens(JavaParser.IDENTIFIER); }
+ public TerminalNode IDENTIFIER(int i) {
+ return getToken(JavaParser.IDENTIFIER, i);
+ }
+ public List typeArgumentsOrDiamond() {
+ return getRuleContexts(TypeArgumentsOrDiamondContext.class);
+ }
+ public TypeArgumentsOrDiamondContext typeArgumentsOrDiamond(int i) {
+ return getRuleContext(TypeArgumentsOrDiamondContext.class,i);
+ }
+ public List DOT() { return getTokens(JavaParser.DOT); }
+ public TerminalNode DOT(int i) {
+ return getToken(JavaParser.DOT, i);
+ }
+ public PrimitiveTypeContext primitiveType() {
+ return getRuleContext(PrimitiveTypeContext.class,0);
+ }
+ public CreatedNameContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_createdName; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterCreatedName(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitCreatedName(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitCreatedName(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final CreatedNameContext createdName() throws RecognitionException {
+ CreatedNameContext _localctx = new CreatedNameContext(_ctx, getState());
+ enterRule(_localctx, 180, RULE_createdName);
+ int _la;
+ try {
+ setState(1313);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1298);
+ match(IDENTIFIER);
+ setState(1300);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1299);
+ typeArgumentsOrDiamond();
+ }
+ }
+
+ setState(1309);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==DOT) {
+ {
+ {
+ setState(1302);
+ match(DOT);
+ setState(1303);
+ match(IDENTIFIER);
+ setState(1305);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1304);
+ typeArgumentsOrDiamond();
+ }
+ }
+
+ }
+ }
+ setState(1311);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ break;
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case SHORT:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1312);
+ primitiveType();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InnerCreatorContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public ClassCreatorRestContext classCreatorRest() {
+ return getRuleContext(ClassCreatorRestContext.class,0);
+ }
+ public NonWildcardTypeArgumentsOrDiamondContext nonWildcardTypeArgumentsOrDiamond() {
+ return getRuleContext(NonWildcardTypeArgumentsOrDiamondContext.class,0);
+ }
+ public InnerCreatorContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_innerCreator; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterInnerCreator(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitInnerCreator(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitInnerCreator(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final InnerCreatorContext innerCreator() throws RecognitionException {
+ InnerCreatorContext _localctx = new InnerCreatorContext(_ctx, getState());
+ enterRule(_localctx, 182, RULE_innerCreator);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1315);
+ match(IDENTIFIER);
+ setState(1317);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LT) {
+ {
+ setState(1316);
+ nonWildcardTypeArgumentsOrDiamond();
+ }
+ }
+
+ setState(1319);
+ classCreatorRest();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ArrayCreatorRestContext extends ParserRuleContext {
+ public List LBRACK() { return getTokens(JavaParser.LBRACK); }
+ public TerminalNode LBRACK(int i) {
+ return getToken(JavaParser.LBRACK, i);
+ }
+ public List RBRACK() { return getTokens(JavaParser.RBRACK); }
+ public TerminalNode RBRACK(int i) {
+ return getToken(JavaParser.RBRACK, i);
+ }
+ public ArrayInitializerContext arrayInitializer() {
+ return getRuleContext(ArrayInitializerContext.class,0);
+ }
+ public List expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public ArrayCreatorRestContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_arrayCreatorRest; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterArrayCreatorRest(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitArrayCreatorRest(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitArrayCreatorRest(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ArrayCreatorRestContext arrayCreatorRest() throws RecognitionException {
+ ArrayCreatorRestContext _localctx = new ArrayCreatorRestContext(_ctx, getState());
+ enterRule(_localctx, 184, RULE_arrayCreatorRest);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1321);
+ match(LBRACK);
+ setState(1349);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case RBRACK:
+ {
+ setState(1322);
+ match(RBRACK);
+ setState(1327);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==LBRACK) {
+ {
+ {
+ setState(1323);
+ match(LBRACK);
+ setState(1324);
+ match(RBRACK);
+ }
+ }
+ setState(1329);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(1330);
+ arrayInitializer();
+ }
+ break;
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case NEW:
+ case SHORT:
+ case SUPER:
+ case THIS:
+ case VOID:
+ case DECIMAL_LITERAL:
+ case HEX_LITERAL:
+ case OCT_LITERAL:
+ case BINARY_LITERAL:
+ case FLOAT_LITERAL:
+ case HEX_FLOAT_LITERAL:
+ case BOOL_LITERAL:
+ case CHAR_LITERAL:
+ case STRING_LITERAL:
+ case NULL_LITERAL:
+ case LPAREN:
+ case LT:
+ case BANG:
+ case TILDE:
+ case INC:
+ case DEC:
+ case ADD:
+ case SUB:
+ case AT:
+ case IDENTIFIER:
+ {
+ setState(1331);
+ expression(0);
+ setState(1332);
+ match(RBRACK);
+ setState(1339);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,163,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1333);
+ match(LBRACK);
+ setState(1334);
+ expression(0);
+ setState(1335);
+ match(RBRACK);
+ }
+ }
+ }
+ setState(1341);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,163,_ctx);
+ }
+ setState(1346);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,164,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1342);
+ match(LBRACK);
+ setState(1343);
+ match(RBRACK);
+ }
+ }
+ }
+ setState(1348);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,164,_ctx);
+ }
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ClassCreatorRestContext extends ParserRuleContext {
+ public ArgumentsContext arguments() {
+ return getRuleContext(ArgumentsContext.class,0);
+ }
+ public ClassBodyContext classBody() {
+ return getRuleContext(ClassBodyContext.class,0);
+ }
+ public ClassCreatorRestContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_classCreatorRest; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterClassCreatorRest(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitClassCreatorRest(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitClassCreatorRest(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ClassCreatorRestContext classCreatorRest() throws RecognitionException {
+ ClassCreatorRestContext _localctx = new ClassCreatorRestContext(_ctx, getState());
+ enterRule(_localctx, 186, RULE_classCreatorRest);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1351);
+ arguments();
+ setState(1353);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,166,_ctx) ) {
+ case 1:
+ {
+ setState(1352);
+ classBody();
+ }
+ break;
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ExplicitGenericInvocationContext extends ParserRuleContext {
+ public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() {
+ return getRuleContext(NonWildcardTypeArgumentsContext.class,0);
+ }
+ public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() {
+ return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0);
+ }
+ public ExplicitGenericInvocationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_explicitGenericInvocation; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterExplicitGenericInvocation(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitExplicitGenericInvocation(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitExplicitGenericInvocation(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ExplicitGenericInvocationContext explicitGenericInvocation() throws RecognitionException {
+ ExplicitGenericInvocationContext _localctx = new ExplicitGenericInvocationContext(_ctx, getState());
+ enterRule(_localctx, 188, RULE_explicitGenericInvocation);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1355);
+ nonWildcardTypeArguments();
+ setState(1356);
+ explicitGenericInvocationSuffix();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeArgumentsOrDiamondContext extends ParserRuleContext {
+ public TerminalNode LT() { return getToken(JavaParser.LT, 0); }
+ public TerminalNode GT() { return getToken(JavaParser.GT, 0); }
+ public TypeArgumentsContext typeArguments() {
+ return getRuleContext(TypeArgumentsContext.class,0);
+ }
+ public TypeArgumentsOrDiamondContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeArgumentsOrDiamond; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeArgumentsOrDiamond(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeArgumentsOrDiamond(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeArgumentsOrDiamond(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeArgumentsOrDiamondContext typeArgumentsOrDiamond() throws RecognitionException {
+ TypeArgumentsOrDiamondContext _localctx = new TypeArgumentsOrDiamondContext(_ctx, getState());
+ enterRule(_localctx, 190, RULE_typeArgumentsOrDiamond);
+ try {
+ setState(1361);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,167,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1358);
+ match(LT);
+ setState(1359);
+ match(GT);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1360);
+ typeArguments();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class NonWildcardTypeArgumentsOrDiamondContext extends ParserRuleContext {
+ public TerminalNode LT() { return getToken(JavaParser.LT, 0); }
+ public TerminalNode GT() { return getToken(JavaParser.GT, 0); }
+ public NonWildcardTypeArgumentsContext nonWildcardTypeArguments() {
+ return getRuleContext(NonWildcardTypeArgumentsContext.class,0);
+ }
+ public NonWildcardTypeArgumentsOrDiamondContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_nonWildcardTypeArgumentsOrDiamond; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterNonWildcardTypeArgumentsOrDiamond(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitNonWildcardTypeArgumentsOrDiamond(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitNonWildcardTypeArgumentsOrDiamond(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final NonWildcardTypeArgumentsOrDiamondContext nonWildcardTypeArgumentsOrDiamond() throws RecognitionException {
+ NonWildcardTypeArgumentsOrDiamondContext _localctx = new NonWildcardTypeArgumentsOrDiamondContext(_ctx, getState());
+ enterRule(_localctx, 192, RULE_nonWildcardTypeArgumentsOrDiamond);
+ try {
+ setState(1366);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,168,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1363);
+ match(LT);
+ setState(1364);
+ match(GT);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(1365);
+ nonWildcardTypeArguments();
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class NonWildcardTypeArgumentsContext extends ParserRuleContext {
+ public TerminalNode LT() { return getToken(JavaParser.LT, 0); }
+ public TypeListContext typeList() {
+ return getRuleContext(TypeListContext.class,0);
+ }
+ public TerminalNode GT() { return getToken(JavaParser.GT, 0); }
+ public NonWildcardTypeArgumentsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_nonWildcardTypeArguments; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterNonWildcardTypeArguments(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitNonWildcardTypeArguments(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitNonWildcardTypeArguments(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final NonWildcardTypeArgumentsContext nonWildcardTypeArguments() throws RecognitionException {
+ NonWildcardTypeArgumentsContext _localctx = new NonWildcardTypeArgumentsContext(_ctx, getState());
+ enterRule(_localctx, 194, RULE_nonWildcardTypeArguments);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1368);
+ match(LT);
+ setState(1369);
+ typeList();
+ setState(1370);
+ match(GT);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeListContext extends ParserRuleContext {
+ public List typeType() {
+ return getRuleContexts(TypeTypeContext.class);
+ }
+ public TypeTypeContext typeType(int i) {
+ return getRuleContext(TypeTypeContext.class,i);
+ }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public TypeListContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeList; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeList(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeList(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeList(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeListContext typeList() throws RecognitionException {
+ TypeListContext _localctx = new TypeListContext(_ctx, getState());
+ enterRule(_localctx, 196, RULE_typeList);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1372);
+ typeType();
+ setState(1377);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(1373);
+ match(COMMA);
+ setState(1374);
+ typeType();
+ }
+ }
+ setState(1379);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeTypeContext extends ParserRuleContext {
+ public ClassOrInterfaceTypeContext classOrInterfaceType() {
+ return getRuleContext(ClassOrInterfaceTypeContext.class,0);
+ }
+ public PrimitiveTypeContext primitiveType() {
+ return getRuleContext(PrimitiveTypeContext.class,0);
+ }
+ public List annotation() {
+ return getRuleContexts(AnnotationContext.class);
+ }
+ public AnnotationContext annotation(int i) {
+ return getRuleContext(AnnotationContext.class,i);
+ }
+ public List LBRACK() { return getTokens(JavaParser.LBRACK); }
+ public TerminalNode LBRACK(int i) {
+ return getToken(JavaParser.LBRACK, i);
+ }
+ public List RBRACK() { return getTokens(JavaParser.RBRACK); }
+ public TerminalNode RBRACK(int i) {
+ return getToken(JavaParser.RBRACK, i);
+ }
+ public TypeTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeType(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeType(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeTypeContext typeType() throws RecognitionException {
+ TypeTypeContext _localctx = new TypeTypeContext(_ctx, getState());
+ enterRule(_localctx, 198, RULE_typeType);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1383);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,170,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1380);
+ annotation();
+ }
+ }
+ }
+ setState(1385);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,170,_ctx);
+ }
+ setState(1388);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case IDENTIFIER:
+ {
+ setState(1386);
+ classOrInterfaceType();
+ }
+ break;
+ case BOOLEAN:
+ case BYTE:
+ case CHAR:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case LONG:
+ case SHORT:
+ {
+ setState(1387);
+ primitiveType();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ setState(1400);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,173,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(1393);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==AT || _la==IDENTIFIER) {
+ {
+ {
+ setState(1390);
+ annotation();
+ }
+ }
+ setState(1395);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(1396);
+ match(LBRACK);
+ setState(1397);
+ match(RBRACK);
+ }
+ }
+ }
+ setState(1402);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,173,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class PrimitiveTypeContext extends ParserRuleContext {
+ public TerminalNode BOOLEAN() { return getToken(JavaParser.BOOLEAN, 0); }
+ public TerminalNode CHAR() { return getToken(JavaParser.CHAR, 0); }
+ public TerminalNode BYTE() { return getToken(JavaParser.BYTE, 0); }
+ public TerminalNode SHORT() { return getToken(JavaParser.SHORT, 0); }
+ public TerminalNode INT() { return getToken(JavaParser.INT, 0); }
+ public TerminalNode LONG() { return getToken(JavaParser.LONG, 0); }
+ public TerminalNode FLOAT() { return getToken(JavaParser.FLOAT, 0); }
+ public TerminalNode DOUBLE() { return getToken(JavaParser.DOUBLE, 0); }
+ public PrimitiveTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_primitiveType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterPrimitiveType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitPrimitiveType(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitPrimitiveType(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final PrimitiveTypeContext primitiveType() throws RecognitionException {
+ PrimitiveTypeContext _localctx = new PrimitiveTypeContext(_ctx, getState());
+ enterRule(_localctx, 200, RULE_primitiveType);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1403);
+ _la = _input.LA(1);
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLEAN) | (1L << BYTE) | (1L << CHAR) | (1L << DOUBLE) | (1L << FLOAT) | (1L << INT) | (1L << LONG) | (1L << SHORT))) != 0)) ) {
+ _errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TypeArgumentsContext extends ParserRuleContext {
+ public TerminalNode LT() { return getToken(JavaParser.LT, 0); }
+ public List typeArgument() {
+ return getRuleContexts(TypeArgumentContext.class);
+ }
+ public TypeArgumentContext typeArgument(int i) {
+ return getRuleContext(TypeArgumentContext.class,i);
+ }
+ public TerminalNode GT() { return getToken(JavaParser.GT, 0); }
+ public List COMMA() { return getTokens(JavaParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(JavaParser.COMMA, i);
+ }
+ public TypeArgumentsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_typeArguments; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterTypeArguments(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitTypeArguments(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof JavaParserVisitor ) return ((JavaParserVisitor extends T>)visitor).visitTypeArguments(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TypeArgumentsContext typeArguments() throws RecognitionException {
+ TypeArgumentsContext _localctx = new TypeArgumentsContext(_ctx, getState());
+ enterRule(_localctx, 202, RULE_typeArguments);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(1405);
+ match(LT);
+ setState(1406);
+ typeArgument();
+ setState(1411);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(1407);
+ match(COMMA);
+ setState(1408);
+ typeArgument();
+ }
+ }
+ setState(1413);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(1414);
+ match(GT);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SuperSuffixContext extends ParserRuleContext {
+ public ArgumentsContext arguments() {
+ return getRuleContext(ArgumentsContext.class,0);
+ }
+ public TerminalNode DOT() { return getToken(JavaParser.DOT, 0); }
+ public TerminalNode IDENTIFIER() { return getToken(JavaParser.IDENTIFIER, 0); }
+ public SuperSuffixContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_superSuffix; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).enterSuperSuffix(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof JavaParserListener ) ((JavaParserListener)listener).exitSuperSuffix(this);
+ }
+ @Override
+ public