diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml b/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml index 1d944e022..cc6aacce3 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml @@ -86,6 +86,11 @@ contentType="org.springframework.boot.ide.pom.xml" id="org.eclipse.languageserver.languages.springboot"> + + @@ -188,6 +193,18 @@ content-type="org.springframework.boot.ide.pom.xml" file-names="pom.xml"> + + + + - - - - + + - - - - + + + + + + - - - - + - - - + + + + + + - - - + + + diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java index 7bc8745b0..fb8ba983c 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java @@ -48,4 +48,6 @@ public class Constants { public static final String PREF_MODULITH = "boot-java.modulith-project-tracking"; + public static final String PREF_JPQL = "boot-java.jpql"; + } diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java index be861a3cb..21de8acae 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java @@ -206,6 +206,7 @@ public class DelegatingStreamConnectionProvider implements StreamConnectionProvi validation.put("spel", validationSpelExpressions); validation.put("java", javaValidation); + bootJavaObj.put("jpql", preferenceStore.getBoolean(Constants.PREF_JPQL)); bootJavaObj.put("live-information", liveInformation); bootJavaObj.put("support-spring-xml-config", supportXML); bootJavaObj.put("change-detection", bootChangeDetection); diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java index 8cec47a46..1e7ef4621 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java @@ -43,6 +43,9 @@ public class BootJavaPreferencesPage extends FieldEditorPreferencePage implement addField(new BooleanFieldEditor(Constants.PREF_CHANGE_DETECTION, "Live Boot Change Detection", fieldEditorParent)); + // JPQL Support switch + addField(new BooleanFieldEditor(Constants.PREF_JPQL, "JPA Query language support", fieldEditorParent)); + // Experimental Modulith support addField(new BooleanFieldEditor(Constants.PREF_MODULITH, "Spring Boot Modulith automatic project tracking and metadata update", fieldEditorParent)); diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java index df744d304..91d93b18e 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java @@ -64,6 +64,8 @@ public class PrefsInitializer extends AbstractPreferenceInitializer { preferenceStore.setDefault(Constants.PREF_LIVE_INFORMATION_ALL_JVM_PROCESSES, false); + preferenceStore.setDefault(Constants.PREF_JPQL, true); + } } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java index c095971ed..3b7e77d07 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -31,12 +32,20 @@ import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.SemanticTokens; +import org.eclipse.lsp4j.SemanticTokensDelta; +import org.eclipse.lsp4j.SemanticTokensDeltaParams; +import org.eclipse.lsp4j.SemanticTokensParams; +import org.eclipse.lsp4j.SemanticTokensRangeParams; +import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.WorkspaceSymbol; import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.springframework.context.ApplicationContext; import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector; import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler; import org.springframework.ide.vscode.commons.languageserver.util.CodeLensHandler; import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler; @@ -81,6 +90,7 @@ public class CompositeLanguageServerComponents implements LanguageServerComponen private final CodeLensHandler codeLensHandler; private final DocumentSymbolHandler docSymbolHandler; private final InlayHintHandler inlayHintHandler; + private final SemanticTokensHandler semanticTokensHanlder; public CompositeLanguageServerComponents(ApplicationContext appContext, Builder builder) { SimpleLanguageServer server = appContext.getBean(SimpleLanguageServer.class); @@ -202,6 +212,60 @@ public class CompositeLanguageServerComponents implements LanguageServerComponen return Collections.emptyList(); } }; + + List semanticTokenHandlers = componentsByLanguageId.values().stream().flatMap(l -> l.stream()).map(c -> c.getSemanticTokensHandler()).filter(o -> o.isPresent()).map(o -> o.get()).collect(Collectors.toList()); + List listCapabilities = semanticTokenHandlers.stream().map(sth -> sth.getCapability()).filter(Objects::nonNull).collect(Collectors.toList()); + for (int i = 1; i < listCapabilities.size(); i++) { + SemanticTokensWithRegistrationOptions first = listCapabilities.get(0); + SemanticTokensWithRegistrationOptions current = listCapabilities.get(i); + if (!Objects.equals(first.getFull(), current.getFull()) + || !Objects.equals(first.getLegend(), current.getLegend()) + || !Objects.equals(first.getRange(), current.getRange())) { + throw new IllegalStateException("Incompatible Semantic Token registrations for composite language server components"); + } + } + this.semanticTokensHanlder = semanticTokenHandlers.isEmpty() ? null : new SemanticTokensHandler() { + + @Override + public SemanticTokensWithRegistrationOptions getCapability() { + + SemanticTokensWithRegistrationOptions capabilities = new SemanticTokensWithRegistrationOptions(); + capabilities.setDocumentSelector(listCapabilities.stream().map(c -> c.getDocumentSelector()).flatMap(l -> l.stream()).collect(Collectors.toList())); + if (!listCapabilities.isEmpty()) { + SemanticTokensWithRegistrationOptions first = listCapabilities.get(0); + capabilities.setFull(first.getFull()); + capabilities.setLegend(first.getLegend()); + capabilities.setRange(first.getRange()); + } + return capabilities; + } + + @Override + public SemanticTokens semanticTokensFull(SemanticTokensParams params, CancelChecker cancelChecker) { + return findHandler(params.getTextDocument()).map(sth -> sth.semanticTokensFull(params, cancelChecker)).orElse(SemanticTokensHandler.super.semanticTokensFull(params, cancelChecker)); + } + + @Override + public Either semanticTokensFullDelta( + SemanticTokensDeltaParams params, CancelChecker cancelChecker) { + return findHandler(params.getTextDocument()).map(sth -> sth.semanticTokensFullDelta(params, cancelChecker)).orElse(SemanticTokensHandler.super.semanticTokensFullDelta(params, cancelChecker)); + } + + @Override + public SemanticTokens semanticTokensRange(SemanticTokensRangeParams params, CancelChecker cancelChecker) { + return findHandler(params.getTextDocument()).map(sth -> sth.semanticTokensRange(params, cancelChecker)).orElse(SemanticTokensHandler.super.semanticTokensRange(params, cancelChecker)); + } + + private Optional findHandler(TextDocumentIdentifier docId) { + TextDocument doc = server.getTextDocumentService().getLatestSnapshot(docId.getUri()); + LanguageId language = doc.getLanguageId(); + List subComponents = componentsByLanguageId.get(language); + if (subComponents != null) { + return subComponents.stream().filter(sc -> sc.getSemanticTokensHandler().isPresent()).map(sc -> sc.getSemanticTokensHandler().get()).findFirst(); + } + return Optional.empty(); + } + }; } @Override @@ -248,6 +312,11 @@ public class CompositeLanguageServerComponents implements LanguageServerComponen return Optional.of(inlayHintHandler); } + @Override + public Optional getSemanticTokensHandler() { + return Optional.ofNullable(semanticTokensHanlder); + } + private static TextDocument getDoc(ApplicationContext appContext, String uri) { TextDocument doc = appContext.getBean(SimpleLanguageServer.class).getTextDocumentService().getLatestSnapshot(uri); diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/LanguageServerComponents.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/LanguageServerComponents.java index 257426106..305f0d753 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/LanguageServerComponents.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/LanguageServerComponents.java @@ -14,6 +14,7 @@ import java.util.Optional; import java.util.Set; import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler; import org.springframework.ide.vscode.commons.languageserver.util.CodeLensHandler; import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler; @@ -30,4 +31,5 @@ public interface LanguageServerComponents { default Optional getDocumentSymbolProvider() { return Optional.empty(); } default Optional getCodeLensHandler() { return Optional.empty(); } default Optional getInlayHintHandler() { return Optional.empty(); } + default Optional getSemanticTokensHandler() { return Optional.empty(); } } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokenData.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokenData.java new file mode 100644 index 000000000..8c3b84efa --- /dev/null +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokenData.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.languageserver.semantic.tokens; + +import java.util.Arrays; +import java.util.Objects; + +public record SemanticTokenData(int start, int end, String type, String[] modifiers) implements Comparable{ + + @Override + public int compareTo(SemanticTokenData o) { + if (start == o.start) { + return end - o.end; + } + return start - o.start; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Arrays.hashCode(modifiers); + result = prime * result + Objects.hash(end, start, type); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SemanticTokenData other = (SemanticTokenData) obj; + return end == other.end && Arrays.equals(modifiers, other.modifiers) && start == other.start + && Objects.equals(type, other.type); + } + +} diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensDataProvider.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensDataProvider.java new file mode 100644 index 000000000..9e45594ef --- /dev/null +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensDataProvider.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.languageserver.semantic.tokens; + +import java.util.Collections; +import java.util.List; + +public interface SemanticTokensDataProvider { + + List getTokenTypes(); + default List getTypeModifiers() { return Collections.emptyList(); } + List computeTokens(String text, int initialOffset); + +} diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensHandler.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensHandler.java new file mode 100644 index 000000000..759f62c97 --- /dev/null +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensHandler.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.languageserver.semantic.tokens; + +import org.eclipse.lsp4j.SemanticTokens; +import org.eclipse.lsp4j.SemanticTokensDelta; +import org.eclipse.lsp4j.SemanticTokensDeltaParams; +import org.eclipse.lsp4j.SemanticTokensParams; +import org.eclipse.lsp4j.SemanticTokensRangeParams; +import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; +import org.eclipse.lsp4j.jsonrpc.messages.Either; + +public interface SemanticTokensHandler { + + SemanticTokensWithRegistrationOptions getCapability(); + + default SemanticTokens semanticTokensFull(SemanticTokensParams params, CancelChecker cancelChecker) { + return new SemanticTokens(); + } + + default Either semanticTokensFullDelta(SemanticTokensDeltaParams params, CancelChecker cancelChecker) { + return Either.forLeft(new SemanticTokens()); + } + + default SemanticTokens semanticTokensRange(SemanticTokensRangeParams params, CancelChecker cancelChecker) { + return new SemanticTokens(); + } + +} diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensUtils.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensUtils.java new file mode 100644 index 000000000..991693980 --- /dev/null +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensUtils.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.languageserver.semantic.tokens; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +import org.eclipse.lsp4j.SemanticTokensLegend; + +public class SemanticTokensUtils { + + private static int getSemanticTokenTypeIndex(SemanticTokensLegend legend, String tokenType) { + return legend.getTokenTypes().indexOf(tokenType); + } + + private static int getSemanticTokenModifiersFlags(SemanticTokensLegend legend, String[] modifiers) { + int flags = 0; + for (String modifier : modifiers) { + int bit = legend.getTokenModifiers().indexOf(modifier); + if (bit < 0) { + throw new IllegalArgumentException("Cannot find modifier '%s' in the legend: %s".formatted(modifier, legend)); + } else { + flags |= (1 << bit); + } + } + return flags; + } + + public static List mapTokensDataToLsp(List tokensData, SemanticTokensLegend legend, Function getLineNumber, Function getColumnNumber) { + // Sort tokens by start offset + Collections.sort(tokensData); + + List data = new ArrayList<>(tokensData.size() * 5); + + // Encode relative positions for tokens + int previousLine = 0; + int previousColumn = 0; + for (SemanticTokenData tokenData : tokensData) { + int currentLine = getLineNumber.apply(tokenData.start()); + int currentColumn = getColumnNumber.apply(tokenData.start()); + data.add(currentLine - previousLine); + data.add(currentLine == previousLine ? currentColumn - previousColumn : currentColumn); + data.add(tokenData.end() - tokenData.start()); + data.add(SemanticTokensUtils.getSemanticTokenTypeIndex(legend, tokenData.type())); + data.add(SemanticTokensUtils.getSemanticTokenModifiersFlags(legend, tokenData.modifiers())); + previousLine = currentLine; + previousColumn = currentColumn; + } + + return data; + } + +} diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index adec2806c..289846119 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -59,6 +59,7 @@ import org.eclipse.lsp4j.ProgressParams; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.Registration; import org.eclipse.lsp4j.RegistrationParams; +import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; import org.eclipse.lsp4j.ServerCapabilities; import org.eclipse.lsp4j.SetTraceParams; import org.eclipse.lsp4j.TextDocumentIdentifier; @@ -383,7 +384,9 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, SpringInd log.debug("workspaceRoots = "+getWorkspaceService().getWorkspaceRoots()); log.debug("hasCompletionSnippetSupport = "+hasCompletionSnippetSupport); log.debug("hasExecuteCommandSupport = "+hasExecuteCommandSupport); - + + getTextDocumentService().clientCapabilities = params.getCapabilities().getTextDocument(); + InitializeResult result = new InitializeResult(); if (hasExecuteCommandSupport) { @@ -541,6 +544,9 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, SpringInd if (hasWorkspaceSymbolHandler()) { c.setWorkspaceSymbolProvider(true); } + // TODO: Check if server supports all token types from the legend + SemanticTokensWithRegistrationOptions semanticTokensCapability = getTextDocumentService().getSemanticTokensWithRegistrationOptions(); + c.setSemanticTokensProvider(semanticTokensCapability); WorkspaceFoldersOptions workspaceFoldersOptions = new WorkspaceFoldersOptions(); workspaceFoldersOptions.setSupported(true); diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index 7c0f377f4..363e7f817 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2022 VMware Inc. + * Copyright (c) 2016, 2024 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -59,6 +59,12 @@ import org.eclipse.lsp4j.LocationLink; import org.eclipse.lsp4j.PublishDiagnosticsParams; import org.eclipse.lsp4j.ReferenceParams; import org.eclipse.lsp4j.RenameParams; +import org.eclipse.lsp4j.SemanticTokens; +import org.eclipse.lsp4j.SemanticTokensDelta; +import org.eclipse.lsp4j.SemanticTokensDeltaParams; +import org.eclipse.lsp4j.SemanticTokensParams; +import org.eclipse.lsp4j.SemanticTokensRangeParams; +import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; import org.eclipse.lsp4j.SignatureHelp; import org.eclipse.lsp4j.SignatureHelpParams; import org.eclipse.lsp4j.SymbolInformation; @@ -81,6 +87,7 @@ import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.ide.vscode.commons.languageserver.config.LanguageServerProperties; import org.springframework.ide.vscode.commons.languageserver.quickfix.Quickfix; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.BadLocationException; import org.springframework.ide.vscode.commons.util.text.LanguageId; @@ -122,6 +129,9 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE private CodeLensResolveHandler codeLensResolveHandler; private CodeActionHandler codeActionHandler; private InlayHintHandler inlayHintHandler; + private SemanticTokensHandler semanticTokensHandler; + + TextDocumentClientCapabilities clientCapabilities; final private ApplicationContext appContext; @@ -446,6 +456,34 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE } } + @Override + public CompletableFuture semanticTokensFull(SemanticTokensParams params) { + if (semanticTokensHandler == null) { + return CompletableFuture.completedFuture(new SemanticTokens()); + } else { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelChecker -> semanticTokensHandler.semanticTokensFull(params, cancelChecker)); + } + } + + @Override + public CompletableFuture> semanticTokensFullDelta( + SemanticTokensDeltaParams params) { + if (semanticTokensHandler == null) { + return CompletableFuture.completedFuture(Either.forLeft(new SemanticTokens())); + } else { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelChecker -> semanticTokensHandler.semanticTokensFullDelta(params, cancelChecker)); + } + } + + @Override + public CompletableFuture semanticTokensRange(SemanticTokensRangeParams params) { + if (semanticTokensHandler == null) { + return CompletableFuture.completedFuture(new SemanticTokens()); + } else { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelChecker -> semanticTokensHandler.semanticTokensRange(params, cancelChecker)); + } + } + private List> computeCodeActions(CancelChecker cancelToken, CodeActionCapabilities capabilities, TextDocument doc, CodeActionParams params) { Builder> listBuilder = ImmutableList.builder(); CodeActionContext context = params.getContext(); @@ -702,11 +740,20 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public boolean hasCodeLensResolveProvider() { return this.codeLensResolveHandler != null; } + + final SemanticTokensWithRegistrationOptions getSemanticTokensWithRegistrationOptions() { + return semanticTokensHandler == null ? null : semanticTokensHandler.getCapability(); + } public synchronized void onDocumentSymbol(DocumentSymbolHandler h) { Assert.isNull("A DocumentSymbolHandler is already set, multiple handlers not supported yet", documentSymbolHandler); this.documentSymbolHandler = h; } + + public synchronized void onSemanticTokens(SemanticTokensHandler h) { + Assert.isNull("A SemanticTokensHandler is already set, multiple handlers not supported yet", semanticTokensHandler); + this.semanticTokensHandler = h; + } public boolean hasDocumentSymbolHandler() { return this.documentSymbolHandler != null; @@ -721,7 +768,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE return this.documentHighlightHandler != null; } - public synchronized void onCompletion(CompletionHandler h) { + public synchronized void onCompletion(CompletionHandler h) { Assert.isNull("A completion handler is already set, multiple handlers not supported yet", completionHandler); this.completionHandler = h; } @@ -748,5 +795,5 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public boolean hasReferencesHandler() { return this.referencesHandler != null; } - + } diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/LanguageId.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/LanguageId.java index 4d4dd2be8..151b446e7 100644 --- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/LanguageId.java +++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/LanguageId.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2022 Pivotal, Inc. + * Copyright (c) 2017, 2024 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -32,6 +32,7 @@ public class LanguageId { public static final LanguageId BOOT_PROPERTIES = of("spring-boot-properties"); public static final LanguageId BOOT_PROPERTIES_YAML = of("spring-boot-properties-yaml"); public static final LanguageId SPRING_FACTORIES = of("spring-factories"); + public static final LanguageId JPA_QUERY_PROPERTIES = of("jpa-query-properties"); private final String id; diff --git a/headless-services/commons/java-properties/.gitignore b/headless-services/commons/java-properties/.gitignore index 0e22d8a64..8dd191b7e 100644 --- a/headless-services/commons/java-properties/.gitignore +++ b/headless-services/commons/java-properties/.gitignore @@ -2,3 +2,7 @@ target .idea *.iml antlr-*.jar +/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaProperties.interp +/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaProperties.tokens +/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesLexer.interp +/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesLexer.tokens diff --git a/headless-services/commons/java-properties/generate-parser.sh b/headless-services/commons/java-properties/generate-parser.sh index a10bf95ed..c3b344129 100755 --- a/headless-services/commons/java-properties/generate-parser.sh +++ b/headless-services/commons/java-properties/generate-parser.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -ANTLR_VERSION=4.11.1 +ANTLR_VERSION=4.13.1 if [ ! -f antlr-${ANTLR_VERSION}.jar ]; then curl https://www.antlr.org/download/antlr-${ANTLR_VERSION}-complete.jar --output antlr-${ANTLR_VERSION}.jar fi diff --git a/headless-services/commons/java-properties/pom.xml b/headless-services/commons/java-properties/pom.xml index 94775e0b4..5ef708b83 100644 --- a/headless-services/commons/java-properties/pom.xml +++ b/headless-services/commons/java-properties/pom.xml @@ -28,7 +28,7 @@ org.antlr antlr4-runtime - 4.11.1 + ${antlr.version} diff --git a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/AntlrParser.java b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/AntlrParser.java index 3501ccad8..1d3fa3057 100644 --- a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/AntlrParser.java +++ b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/AntlrParser.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016 Pivotal, Inc. + * Copyright (c) 2016, 2024 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -15,7 +15,7 @@ import java.util.BitSet; import java.util.List; import org.antlr.v4.runtime.ANTLRErrorListener; -import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.ConsoleErrorListener; import org.antlr.v4.runtime.ParserRuleContext; @@ -53,8 +53,8 @@ public class AntlrParser implements Parser { ArrayList syntaxErrors = new ArrayList<>(); ArrayList problems = new ArrayList<>(); ArrayList astNodes = new ArrayList<>(); - - JavaPropertiesLexer lexer = new JavaPropertiesLexer(new ANTLRInputStream(text.toCharArray(), text.length())); + + JavaPropertiesLexer lexer = new JavaPropertiesLexer(CharStreams.fromString(text)); CommonTokenStream tokens = new CommonTokenStream(lexer); JavaPropertiesParser parser = new JavaPropertiesParser(tokens); diff --git a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesBaseListener.java b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesBaseListener.java index a81ab850c..b1fd27c58 100644 --- a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesBaseListener.java +++ b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesBaseListener.java @@ -1,4 +1,4 @@ -// Generated from java-escape by ANTLR 4.11.1 +// Generated from JavaProperties.g4 by ANTLR 4.13.1 package org.springframework.ide.vscode.java.properties.antlr.parser; import org.antlr.v4.runtime.ParserRuleContext; diff --git a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesLexer.java b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesLexer.java index f23f6473b..91df41475 100644 --- a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesLexer.java +++ b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesLexer.java @@ -1,4 +1,4 @@ -// Generated from java-escape by ANTLR 4.11.1 +// Generated from JavaProperties.g4 by ANTLR 4.13.1 package org.springframework.ide.vscode.java.properties.antlr.parser; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; @@ -9,9 +9,9 @@ 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", "CheckReturnValue"}) +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) public class JavaPropertiesLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = diff --git a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesListener.java b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesListener.java index 5e1c6798e..03596312d 100644 --- a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesListener.java +++ b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesListener.java @@ -1,4 +1,4 @@ -// Generated from java-escape by ANTLR 4.11.1 +// Generated from JavaProperties.g4 by ANTLR 4.13.1 package org.springframework.ide.vscode.java.properties.antlr.parser; import org.antlr.v4.runtime.tree.ParseTreeListener; diff --git a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesParser.java b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesParser.java index 8fd63d003..a54fcd8ca 100644 --- a/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesParser.java +++ b/headless-services/commons/java-properties/src/main/java/org/springframework/ide/vscode/java/properties/antlr/parser/JavaPropertiesParser.java @@ -1,4 +1,4 @@ -// Generated from java-escape by ANTLR 4.11.1 +// Generated from JavaProperties.g4 by ANTLR 4.13.1 package org.springframework.ide.vscode.java.properties.antlr.parser; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; @@ -11,7 +11,7 @@ import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class JavaPropertiesParser extends Parser { - static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = @@ -78,7 +78,7 @@ public class JavaPropertiesParser extends Parser { } @Override - public String getGrammarFileName() { return "java-escape"; } + public String getGrammarFileName() { return "JavaProperties.g4"; } @Override public String[] getRuleNames() { return ruleNames; } @@ -127,7 +127,7 @@ public class JavaPropertiesParser extends Parser { setState(25); _errHandler.sync(this); _la = _input.LA(1); - while (((_la) & ~0x3f) == 0 && ((1L << _la) & 498L) != 0) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 498L) != 0)) { { { setState(22); @@ -339,7 +339,7 @@ public class JavaPropertiesParser extends Parser { setState(53); _errHandler.sync(this); _la = _input.LA(1); - while (((_la) & ~0x3f) == 0 && ((1L << _la) & 446L) != 0) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 446L) != 0)) { { { setState(50); @@ -653,7 +653,7 @@ public class JavaPropertiesParser extends Parser { { setState(80); _la = _input.LA(1); - if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 140L) != 0) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 140L) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -664,7 +664,7 @@ public class JavaPropertiesParser extends Parser { setState(84); _errHandler.sync(this); _la = _input.LA(1); - while (((_la) & ~0x3f) == 0 && ((1L << _la) & 446L) != 0) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 446L) != 0)) { { { setState(81); @@ -820,7 +820,7 @@ public class JavaPropertiesParser extends Parser { { setState(97); _la = _input.LA(1); - if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 510L) != 0) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 510L) != 0)) ) { _errHandler.recoverInline(this); } else { diff --git a/headless-services/commons/jpql/.gitignore b/headless-services/commons/jpql/.gitignore new file mode 100644 index 000000000..03b7046dc --- /dev/null +++ b/headless-services/commons/jpql/.gitignore @@ -0,0 +1,6 @@ +/antlr-4.13.1.jar +/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/Jpql.interp +/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/Jpql.tokens +/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlLexer.interp +/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlLexer.tokens +/target diff --git a/headless-services/commons/jpql/generate-jpql-parser.sh b/headless-services/commons/jpql/generate-jpql-parser.sh new file mode 100755 index 000000000..2ead8d632 --- /dev/null +++ b/headless-services/commons/jpql/generate-jpql-parser.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e +ANTLR_VERSION=4.13.1 +if [ ! -f antlr-${ANTLR_VERSION}.jar ]; then + curl https://www.antlr.org/download/antlr-${ANTLR_VERSION}-complete.jar --output antlr-${ANTLR_VERSION}.jar +fi +workdir=$(pwd) +cd grammars +java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar Jpql.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser -package org.springframework.ide.vscode.jpql.antlr.parser + diff --git a/headless-services/commons/jpql/grammars/Jpql.g4 b/headless-services/commons/jpql/grammars/Jpql.g4 new file mode 100644 index 000000000..a5199dd09 --- /dev/null +++ b/headless-services/commons/jpql/grammars/Jpql.g4 @@ -0,0 +1,866 @@ +/* + * Copyright 2011-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +grammar Jpql; + +@header { +/** + * JPQL per https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#bnf + * + * This is JPA BNF for JPQL. There are gaps and inconsistencies in the BNF itself, explained by other fragments of the spec. + * + * @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf + * @author Greg Turnquist + * @author Christoph Strobl + * @since 3.1 + */ +} + +/* + Parser rules + */ + +start + : ql_statement EOF + ; + +ql_statement + : select_statement + | update_statement + | delete_statement + ; + +select_statement + : select_clause from_clause (where_clause)? (groupby_clause)? (having_clause)? (orderby_clause)? + ; + +update_statement + : update_clause (where_clause)? + ; + +delete_statement + : delete_clause (where_clause)? + ; + +from_clause + : FROM identification_variable_declaration (',' identificationVariableDeclarationOrCollectionMemberDeclaration )* + ; + +// This parser rule is needed to iterate over these two types from #from_clause +identificationVariableDeclarationOrCollectionMemberDeclaration + : identification_variable_declaration + | collection_member_declaration + ; + +identification_variable_declaration + : range_variable_declaration (join | fetch_join)* + ; + +range_variable_declaration + : entity_name AS? identification_variable + ; + +join + : join_spec join_association_path_expression AS? identification_variable (join_condition)? + | join_spec join_association_path_expression where_clause + ; + +fetch_join + : join_spec FETCH join_association_path_expression + ; + +join_spec + : ((LEFT (OUTER)?) | INNER)? JOIN + ; + +join_condition + : ON conditional_expression + ; + +join_association_path_expression + : join_collection_valued_path_expression + | join_single_valued_path_expression + | TREAT '(' join_collection_valued_path_expression AS subtype ')' + | TREAT '(' join_single_valued_path_expression AS subtype ')' + ; + +join_collection_valued_path_expression + : identification_variable '.' (single_valued_embeddable_object_field '.')* collection_valued_field + ; + +join_single_valued_path_expression + : identification_variable '.' (single_valued_embeddable_object_field '.')* single_valued_object_field + ; + +collection_member_declaration + : IN '(' collection_valued_path_expression ')' AS? identification_variable + ; + +qualified_identification_variable + : map_field_identification_variable + | ENTRY '(' identification_variable ')' + ; + +map_field_identification_variable + : KEY '(' identification_variable ')' + | VALUE '(' identification_variable ')' + ; + +single_valued_path_expression + : qualified_identification_variable + | TREAT '(' qualified_identification_variable AS subtype ')' + | state_field_path_expression + | single_valued_object_path_expression + ; + +general_identification_variable + : identification_variable + | map_field_identification_variable + ; + +general_subpath + : simple_subpath + | treated_subpath ('.' single_valued_object_field)* + ; + +simple_subpath + : general_identification_variable + | general_identification_variable ('.' single_valued_object_field)* + ; + +treated_subpath + : TREAT '(' general_subpath AS subtype ')' + ; + +state_field_path_expression + : general_subpath '.' state_field + ; + +state_valued_path_expression + : state_field_path_expression + | general_identification_variable + ; + +single_valued_object_path_expression + : general_subpath '.' single_valued_object_field + ; + +collection_valued_path_expression + : general_subpath '.' collection_value_field // BNF at end of spec has a typo + ; + +update_clause + : UPDATE entity_name (AS? identification_variable)? SET update_item (',' update_item)* + ; + +update_item + : (identification_variable '.')? (single_valued_embeddable_object_field '.')* (state_field | single_valued_object_field) EQUAL new_value + ; + +new_value + : scalar_expression + | simple_entity_expression + | NULL + ; + +delete_clause + : DELETE FROM entity_name (AS? identification_variable)? + ; + +select_clause + : SELECT (DISTINCT)? select_item (',' select_item)* + ; + +select_item + : select_expression (AS? result_variable)? + ; + +select_expression + : single_valued_path_expression + | scalar_expression + | aggregate_expression + | identification_variable + | OBJECT '(' identification_variable ')' + | constructor_expression + ; + +constructor_expression + : NEW constructor_name '(' constructor_item (',' constructor_item)* ')' + ; + +constructor_item + : single_valued_path_expression + | scalar_expression + | aggregate_expression + | identification_variable + | literal + ; + +aggregate_expression + : (AVG | MAX | MIN | SUM) '(' (DISTINCT)? state_valued_path_expression ')' + | COUNT '(' (DISTINCT)? (identification_variable | state_valued_path_expression | single_valued_object_path_expression) ')' + | function_invocation + ; + +where_clause + : WHERE conditional_expression + ; + +groupby_clause + : GROUP BY groupby_item (',' groupby_item)* + ; + +groupby_item + : single_valued_path_expression + | identification_variable + ; + +having_clause + : HAVING conditional_expression + ; + +orderby_clause + : ORDER BY orderby_item (',' orderby_item)* + ; + +// TODO Error in spec BNF, correctly shown elsewhere in spec. +orderby_item + : (state_field_path_expression | general_identification_variable | result_variable ) (ASC | DESC)? + ; + +subquery + : simple_select_clause subquery_from_clause (where_clause)? (groupby_clause)? (having_clause)? + ; + +subquery_from_clause + : FROM subselect_identification_variable_declaration (',' (subselect_identification_variable_declaration | collection_member_declaration))* + ; + +subselect_identification_variable_declaration + : identification_variable_declaration + | derived_path_expression AS? identification_variable (join)* + | derived_collection_member_declaration + ; + +derived_path_expression + : general_derived_path '.' single_valued_object_field + | general_derived_path '.' collection_valued_field + ; + +general_derived_path + : simple_derived_path + | treated_derived_path ('.' single_valued_object_field)* + ; + +simple_derived_path + : superquery_identification_variable ('.' single_valued_object_field)* + ; + +treated_derived_path + : TREAT '(' general_derived_path AS subtype ')' + ; + +derived_collection_member_declaration + : IN superquery_identification_variable '.' (single_valued_object_field '.')* collection_valued_field + ; + +simple_select_clause + : SELECT (DISTINCT)? simple_select_expression + ; + +simple_select_expression + : single_valued_path_expression + | scalar_expression + | aggregate_expression + | identification_variable + ; + +scalar_expression + : arithmetic_expression + | string_expression + | enum_expression + | datetime_expression + | boolean_expression + | case_expression + | entity_type_expression + ; + +conditional_expression + : conditional_term + | conditional_expression OR conditional_term + ; + +conditional_term + : conditional_factor + | conditional_term AND conditional_factor + ; + +conditional_factor + : (NOT)? conditional_primary + ; + +conditional_primary + : simple_cond_expression + | '(' conditional_expression ')' + ; + +simple_cond_expression + : comparison_expression + | between_expression + | in_expression + | like_expression + | null_comparison_expression + | empty_collection_comparison_expression + | collection_member_expression + | exists_expression + ; + +between_expression + : arithmetic_expression (NOT)? BETWEEN arithmetic_expression AND arithmetic_expression + | string_expression (NOT)? BETWEEN string_expression AND string_expression + | datetime_expression (NOT)? BETWEEN datetime_expression AND datetime_expression + ; + +in_expression + : (state_valued_path_expression | type_discriminator) (NOT)? IN (('(' in_item (',' in_item)* ')') | ( '(' subquery ')') | collection_valued_input_parameter) + ; + +in_item + : literal + | single_valued_input_parameter + ; + +like_expression + : string_expression (NOT)? LIKE pattern_value (ESCAPE escape_character)? + ; + +null_comparison_expression + : (single_valued_path_expression | input_parameter) IS (NOT)? NULL + ; + +empty_collection_comparison_expression + : collection_valued_path_expression IS (NOT)? EMPTY + ; + +collection_member_expression + : entity_or_value_expression (NOT)? MEMBER (OF)? collection_valued_path_expression + ; + +entity_or_value_expression + : single_valued_object_path_expression + | state_field_path_expression + | simple_entity_or_value_expression + ; + +simple_entity_or_value_expression + : identification_variable + | input_parameter + | literal + ; + +exists_expression + : (NOT)? EXISTS '(' subquery ')' + ; + +all_or_any_expression + : (ALL | ANY | SOME) '(' subquery ')' + ; + +comparison_expression + : string_expression comparison_operator (string_expression | all_or_any_expression) + | boolean_expression op=(EQUAL | NOT_EQUAL) (boolean_expression | all_or_any_expression) + | enum_expression op=(EQUAL | NOT_EQUAL) (enum_expression | all_or_any_expression) + | datetime_expression comparison_operator (datetime_expression | all_or_any_expression) + | entity_expression op=(EQUAL | NOT_EQUAL) (entity_expression | all_or_any_expression) + | arithmetic_expression comparison_operator (arithmetic_expression | all_or_any_expression) + | entity_type_expression op=(EQUAL | NOT_EQUAL) entity_type_expression + ; + +comparison_operator + : op=EQUAL + | op='>' + | op='>=' + | op='<' + | op='<=' + | op=NOT_EQUAL + ; + +arithmetic_expression + : arithmetic_term + | arithmetic_expression op=('+' | '-') arithmetic_term + ; + +arithmetic_term + : arithmetic_factor + | arithmetic_term op=('*' | '/') arithmetic_factor + ; + +arithmetic_factor + : op=('+' | '-')? arithmetic_primary + ; + +arithmetic_primary + : state_valued_path_expression + | numeric_literal + | '(' arithmetic_expression ')' + | input_parameter + | functions_returning_numerics + | aggregate_expression + | case_expression + | function_invocation + | '(' subquery ')' + ; + +string_expression + : state_valued_path_expression + | string_literal + | input_parameter + | functions_returning_strings + | aggregate_expression + | case_expression + | function_invocation + | '(' subquery ')' + ; + +datetime_expression + : state_valued_path_expression + | input_parameter + | functions_returning_datetime + | aggregate_expression + | case_expression + | function_invocation + | date_time_timestamp_literal + | '(' subquery ')' + ; + +boolean_expression + : state_valued_path_expression + | boolean_literal + | input_parameter + | case_expression + | function_invocation + | '(' subquery ')' + ; + +enum_expression + : state_valued_path_expression + | enum_literal + | input_parameter + | case_expression + | '(' subquery ')' + ; + +entity_expression + : single_valued_object_path_expression + | simple_entity_expression + ; + +simple_entity_expression + : identification_variable + | input_parameter + ; + +entity_type_expression + : type_discriminator + | entity_type_literal + | input_parameter + ; + +type_discriminator + : TYPE '(' (general_identification_variable | single_valued_object_path_expression | input_parameter) ')' + ; + +functions_returning_numerics + : LENGTH '(' string_expression ')' + | LOCATE '(' string_expression ',' string_expression (',' arithmetic_expression)? ')' + | ABS '(' arithmetic_expression ')' + | CEILING '(' arithmetic_expression ')' + | EXP '(' arithmetic_expression ')' + | FLOOR '(' arithmetic_expression ')' + | LN '(' arithmetic_expression ')' + | SIGN '(' arithmetic_expression ')' + | SQRT '(' arithmetic_expression ')' + | MOD '(' arithmetic_expression ',' arithmetic_expression ')' + | POWER '(' arithmetic_expression ',' arithmetic_expression ')' + | ROUND '(' arithmetic_expression ',' arithmetic_expression ')' + | SIZE '(' collection_valued_path_expression ')' + | INDEX '(' identification_variable ')' + | extract_datetime_field + ; + +functions_returning_datetime + : CURRENT_DATE + | CURRENT_TIME + | CURRENT_TIMESTAMP + | LOCAL DATE + | LOCAL TIME + | LOCAL DATETIME + | extract_datetime_part + ; + +functions_returning_strings + : CONCAT '(' string_expression ',' string_expression (',' string_expression)* ')' + | SUBSTRING '(' string_expression ',' arithmetic_expression (',' arithmetic_expression)? ')' + | TRIM '(' ((trim_specification)? (trim_character)? FROM)? string_expression ')' + | LOWER '(' string_expression ')' + | UPPER '(' string_expression ')' + ; + +trim_specification + : LEADING + | TRAILING + | BOTH + ; + + +function_invocation + : FUNCTION '(' function_name (',' function_arg)* ')' + ; + +extract_datetime_field + : EXTRACT '(' datetime_field FROM datetime_expression ')' + ; + +datetime_field + : identification_variable + ; + +extract_datetime_part + : EXTRACT '(' datetime_part FROM datetime_expression ')' + ; + +datetime_part + : identification_variable + ; + +function_arg + : literal + | state_valued_path_expression + | input_parameter + | scalar_expression + ; + +case_expression + : general_case_expression + | simple_case_expression + | coalesce_expression + | nullif_expression + ; + +general_case_expression + : CASE when_clause (when_clause)* ELSE scalar_expression END + ; + +when_clause + : WHEN conditional_expression THEN scalar_expression + ; + +simple_case_expression + : CASE case_operand simple_when_clause (simple_when_clause)* ELSE scalar_expression END + ; + +case_operand + : state_valued_path_expression + | type_discriminator + ; + +simple_when_clause + : WHEN scalar_expression THEN scalar_expression + ; + +coalesce_expression + : COALESCE '(' scalar_expression (',' scalar_expression)+ ')' + ; + +nullif_expression + : NULLIF '(' scalar_expression ',' scalar_expression ')' + ; + +/******************* + Gaps in the spec. + *******************/ + +trim_character + : CHARACTER + | character_valued_input_parameter + ; + +identification_variable + : IDENTIFICATION_VARIABLE + | f=(COUNT + | DATE + | INNER + | KEY + | LEFT + | NEW + | ORDER + | OUTER + | POWER + | FLOOR + | SIGN + | TIME + | TYPE + | VALUE) + ; + +constructor_name + : state_field_path_expression + ; + +literal + : STRINGLITERAL + | JAVASTRINGLITERAL + | INTLITERAL + | FLOATLITERAL + | LONGLITERAL + | boolean_literal + | entity_type_literal + ; + +input_parameter + : ':' SPEL + | '?' SPEL + | '?' INTLITERAL + | ':' identification_variable ('%')? + ; + +pattern_value + : string_expression + ; + +date_time_timestamp_literal + : STRINGLITERAL + ; + +entity_type_literal + : identification_variable + ; + +escape_character + : CHARACTER + | character_valued_input_parameter // + ; + +numeric_literal + : INTLITERAL + | FLOATLITERAL + | LONGLITERAL + ; + +boolean_literal + : TRUE + | FALSE + ; + +enum_literal + : state_field_path_expression + ; + +string_literal + : CHARACTER + | STRINGLITERAL + ; + +single_valued_embeddable_object_field + : identification_variable + ; + +subtype + : identification_variable + ; + +collection_valued_field + : identification_variable + ; + +single_valued_object_field + : identification_variable + ; + +state_field + : identification_variable + ; + +collection_value_field + : identification_variable + ; + +entity_name + : identification_variable ('.' identification_variable)* // Hibernate sometimes expands the entity name to FQDN when using named queries + ; + +result_variable + : identification_variable + ; + +superquery_identification_variable + : identification_variable + ; + +collection_valued_input_parameter + : input_parameter + ; + +single_valued_input_parameter + : input_parameter + ; + +function_name + : string_literal + ; + +character_valued_input_parameter + : CHARACTER + | input_parameter + ; + +/* + Lexer rules + */ + + +WS : [ \t\r\n] -> skip ; + +// Build up case-insentive tokens + +fragment A: 'a' | 'A'; +fragment B: 'b' | 'B'; +fragment C: 'c' | 'C'; +fragment D: 'd' | 'D'; +fragment E: 'e' | 'E'; +fragment F: 'f' | 'F'; +fragment G: 'g' | 'G'; +fragment H: 'h' | 'H'; +fragment I: 'i' | 'I'; +fragment J: 'j' | 'J'; +fragment K: 'k' | 'K'; +fragment L: 'l' | 'L'; +fragment M: 'm' | 'M'; +fragment N: 'n' | 'N'; +fragment O: 'o' | 'O'; +fragment P: 'p' | 'P'; +fragment Q: 'q' | 'Q'; +fragment R: 'r' | 'R'; +fragment S: 's' | 'S'; +fragment T: 't' | 'T'; +fragment U: 'u' | 'U'; +fragment V: 'v' | 'V'; +fragment W: 'w' | 'W'; +fragment X: 'x' | 'X'; +fragment Y: 'y' | 'Y'; +fragment Z: 'z' | 'Z'; + +// The following are reserved identifiers: + +ABS : A B S; +ALL : A L L; +AND : A N D; +ANY : A N Y; +AS : A S; +ASC : A S C; +AVG : A V G; +BETWEEN : B E T W E E N; +BOTH : B O T H; +BY : B Y; +CASE : C A S E; +CEILING : C E I L I N G; +COALESCE : C O A L E S C E; +CONCAT : C O N C A T; +COUNT : C O U N T; +CURRENT_DATE : C U R R E N T '_' D A T E; +CURRENT_TIME : C U R R E N T '_' T I M E; +CURRENT_TIMESTAMP : C U R R E N T '_' T I M E S T A M P; +DATE : D A T E; +DATETIME : D A T E T I M E ; +DELETE : D E L E T E; +DESC : D E S C; +DISTINCT : D I S T I N C T; +END : E N D; +ELSE : E L S E; +EMPTY : E M P T Y; +ENTRY : E N T R Y; +ESCAPE : E S C A P E; +EXISTS : E X I S T S; +EXP : E X P; +EXTRACT : E X T R A C T; +FALSE : F A L S E; +FETCH : F E T C H; +FLOOR : F L O O R; +FROM : F R O M; +FUNCTION : F U N C T I O N; +GROUP : G R O U P; +HAVING : H A V I N G; +IN : I N; +INDEX : I N D E X; +INNER : I N N E R; +IS : I S; +JOIN : J O I N; +KEY : K E Y; +LEADING : L E A D I N G; +LEFT : L E F T; +LENGTH : L E N G T H; +LIKE : L I K E; +LN : L N; +LOCAL : L O C A L; +LOCATE : L O C A T E; +LOWER : L O W E R; +MAX : M A X; +MEMBER : M E M B E R; +MIN : M I N; +MOD : M O D; +NEW : N E W; +NOT : N O T; +NULL : N U L L; +NULLIF : N U L L I F; +OBJECT : O B J E C T; +OF : O F; +ON : O N; +OR : O R; +ORDER : O R D E R; +OUTER : O U T E R; +POWER : P O W E R; +ROUND : R O U N D; +SELECT : S E L E C T; +SET : S E T; +SIGN : S I G N; +SIZE : S I Z E; +SOME : S O M E; +SQRT : S Q R T; +SUBSTRING : S U B S T R I N G; +SUM : S U M; +THEN : T H E N; +TIME : T I M E; +TRAILING : T R A I L I N G; +TREAT : T R E A T; +TRIM : T R I M; +TRUE : T R U E; +TYPE : T Y P E; +UPDATE : U P D A T E; +UPPER : U P P E R; +VALUE : V A L U E; +WHEN : W H E N; +WHERE : W H E R E; + +EQUAL : '=' ; +NOT_EQUAL : '<>' | '!=' ; + +CHARACTER : '\'' (~ ('\'' | '\\')) '\'' ; +IDENTIFICATION_VARIABLE : ('a' .. 'z' | 'A' .. 'Z' | '\u0080' .. '\ufffe' | '$' | '_') ('a' .. 'z' | 'A' .. 'Z' | '\u0080' .. '\ufffe' | '0' .. '9' | '$' | '_')* ; +STRINGLITERAL : '\'' (~ ('\'' | '\\'))* '\'' ; +JAVASTRINGLITERAL : '"' ( ('\\' [btnfr"']) | ~('"'))* '"'; +FLOATLITERAL : ('0' .. '9')* '.' ('0' .. '9')+ (E ('0' .. '9')+)* (F|D)?; +INTLITERAL : ('0' .. '9')+ ; +LONGLITERAL : ('0' .. '9')+L ; +SPEL : ('$')('{')(.)*?('}') ; \ No newline at end of file diff --git a/headless-services/commons/jpql/pom.xml b/headless-services/commons/jpql/pom.xml new file mode 100644 index 000000000..fcd82d1c9 --- /dev/null +++ b/headless-services/commons/jpql/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + + org.springframework.ide.vscode + commons-parent + 1.54.0-SNAPSHOT + + jpql + + + + org.antlr + antlr4-runtime + ${antlr.version} + + + + \ No newline at end of file diff --git a/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlBaseListener.java b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlBaseListener.java new file mode 100644 index 000000000..a087506f4 --- /dev/null +++ b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlBaseListener.java @@ -0,0 +1,1600 @@ +// Generated from Jpql.g4 by ANTLR 4.13.1 +package org.springframework.ide.vscode.jpql.antlr.parser; + +/** + * JPQL per https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#bnf + * + * This is JPA BNF for JPQL. There are gaps and inconsistencies in the BNF itself, explained by other fragments of the spec. + * + * @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf + * @author Greg Turnquist + * @author Christoph Strobl + * @since 3.1 + */ + + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link JpqlListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class JpqlBaseListener implements JpqlListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStart(JpqlParser.StartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStart(JpqlParser.StartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQl_statement(JpqlParser.Ql_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQl_statement(JpqlParser.Ql_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelect_statement(JpqlParser.Select_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelect_statement(JpqlParser.Select_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUpdate_statement(JpqlParser.Update_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUpdate_statement(JpqlParser.Update_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDelete_statement(JpqlParser.Delete_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDelete_statement(JpqlParser.Delete_statementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFrom_clause(JpqlParser.From_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFrom_clause(JpqlParser.From_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIdentificationVariableDeclarationOrCollectionMemberDeclaration(JpqlParser.IdentificationVariableDeclarationOrCollectionMemberDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIdentificationVariableDeclarationOrCollectionMemberDeclaration(JpqlParser.IdentificationVariableDeclarationOrCollectionMemberDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIdentification_variable_declaration(JpqlParser.Identification_variable_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIdentification_variable_declaration(JpqlParser.Identification_variable_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRange_variable_declaration(JpqlParser.Range_variable_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRange_variable_declaration(JpqlParser.Range_variable_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJoin(JpqlParser.JoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJoin(JpqlParser.JoinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFetch_join(JpqlParser.Fetch_joinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFetch_join(JpqlParser.Fetch_joinContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJoin_spec(JpqlParser.Join_specContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJoin_spec(JpqlParser.Join_specContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJoin_condition(JpqlParser.Join_conditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJoin_condition(JpqlParser.Join_conditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJoin_association_path_expression(JpqlParser.Join_association_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJoin_association_path_expression(JpqlParser.Join_association_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJoin_collection_valued_path_expression(JpqlParser.Join_collection_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJoin_collection_valued_path_expression(JpqlParser.Join_collection_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJoin_single_valued_path_expression(JpqlParser.Join_single_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJoin_single_valued_path_expression(JpqlParser.Join_single_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollection_member_declaration(JpqlParser.Collection_member_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollection_member_declaration(JpqlParser.Collection_member_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQualified_identification_variable(JpqlParser.Qualified_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQualified_identification_variable(JpqlParser.Qualified_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMap_field_identification_variable(JpqlParser.Map_field_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMap_field_identification_variable(JpqlParser.Map_field_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingle_valued_path_expression(JpqlParser.Single_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingle_valued_path_expression(JpqlParser.Single_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGeneral_identification_variable(JpqlParser.General_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGeneral_identification_variable(JpqlParser.General_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGeneral_subpath(JpqlParser.General_subpathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGeneral_subpath(JpqlParser.General_subpathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_subpath(JpqlParser.Simple_subpathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_subpath(JpqlParser.Simple_subpathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTreated_subpath(JpqlParser.Treated_subpathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTreated_subpath(JpqlParser.Treated_subpathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterState_field_path_expression(JpqlParser.State_field_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitState_field_path_expression(JpqlParser.State_field_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterState_valued_path_expression(JpqlParser.State_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitState_valued_path_expression(JpqlParser.State_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingle_valued_object_path_expression(JpqlParser.Single_valued_object_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingle_valued_object_path_expression(JpqlParser.Single_valued_object_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollection_valued_path_expression(JpqlParser.Collection_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollection_valued_path_expression(JpqlParser.Collection_valued_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUpdate_clause(JpqlParser.Update_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUpdate_clause(JpqlParser.Update_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUpdate_item(JpqlParser.Update_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUpdate_item(JpqlParser.Update_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNew_value(JpqlParser.New_valueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNew_value(JpqlParser.New_valueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDelete_clause(JpqlParser.Delete_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDelete_clause(JpqlParser.Delete_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelect_clause(JpqlParser.Select_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelect_clause(JpqlParser.Select_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelect_item(JpqlParser.Select_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelect_item(JpqlParser.Select_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelect_expression(JpqlParser.Select_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelect_expression(JpqlParser.Select_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstructor_expression(JpqlParser.Constructor_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstructor_expression(JpqlParser.Constructor_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstructor_item(JpqlParser.Constructor_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstructor_item(JpqlParser.Constructor_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAggregate_expression(JpqlParser.Aggregate_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAggregate_expression(JpqlParser.Aggregate_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhere_clause(JpqlParser.Where_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhere_clause(JpqlParser.Where_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGroupby_clause(JpqlParser.Groupby_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGroupby_clause(JpqlParser.Groupby_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGroupby_item(JpqlParser.Groupby_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGroupby_item(JpqlParser.Groupby_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHaving_clause(JpqlParser.Having_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHaving_clause(JpqlParser.Having_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrderby_clause(JpqlParser.Orderby_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrderby_clause(JpqlParser.Orderby_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrderby_item(JpqlParser.Orderby_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrderby_item(JpqlParser.Orderby_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubquery(JpqlParser.SubqueryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubquery(JpqlParser.SubqueryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubquery_from_clause(JpqlParser.Subquery_from_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubquery_from_clause(JpqlParser.Subquery_from_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubselect_identification_variable_declaration(JpqlParser.Subselect_identification_variable_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubselect_identification_variable_declaration(JpqlParser.Subselect_identification_variable_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDerived_path_expression(JpqlParser.Derived_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDerived_path_expression(JpqlParser.Derived_path_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGeneral_derived_path(JpqlParser.General_derived_pathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGeneral_derived_path(JpqlParser.General_derived_pathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_derived_path(JpqlParser.Simple_derived_pathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_derived_path(JpqlParser.Simple_derived_pathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTreated_derived_path(JpqlParser.Treated_derived_pathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTreated_derived_path(JpqlParser.Treated_derived_pathContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDerived_collection_member_declaration(JpqlParser.Derived_collection_member_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDerived_collection_member_declaration(JpqlParser.Derived_collection_member_declarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_select_clause(JpqlParser.Simple_select_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_select_clause(JpqlParser.Simple_select_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_select_expression(JpqlParser.Simple_select_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_select_expression(JpqlParser.Simple_select_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalar_expression(JpqlParser.Scalar_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalar_expression(JpqlParser.Scalar_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConditional_expression(JpqlParser.Conditional_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConditional_expression(JpqlParser.Conditional_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConditional_term(JpqlParser.Conditional_termContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConditional_term(JpqlParser.Conditional_termContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConditional_factor(JpqlParser.Conditional_factorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConditional_factor(JpqlParser.Conditional_factorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConditional_primary(JpqlParser.Conditional_primaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConditional_primary(JpqlParser.Conditional_primaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_cond_expression(JpqlParser.Simple_cond_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_cond_expression(JpqlParser.Simple_cond_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBetween_expression(JpqlParser.Between_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBetween_expression(JpqlParser.Between_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIn_expression(JpqlParser.In_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIn_expression(JpqlParser.In_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIn_item(JpqlParser.In_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIn_item(JpqlParser.In_itemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLike_expression(JpqlParser.Like_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLike_expression(JpqlParser.Like_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNull_comparison_expression(JpqlParser.Null_comparison_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNull_comparison_expression(JpqlParser.Null_comparison_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEmpty_collection_comparison_expression(JpqlParser.Empty_collection_comparison_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEmpty_collection_comparison_expression(JpqlParser.Empty_collection_comparison_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollection_member_expression(JpqlParser.Collection_member_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollection_member_expression(JpqlParser.Collection_member_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEntity_or_value_expression(JpqlParser.Entity_or_value_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEntity_or_value_expression(JpqlParser.Entity_or_value_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_entity_or_value_expression(JpqlParser.Simple_entity_or_value_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_entity_or_value_expression(JpqlParser.Simple_entity_or_value_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExists_expression(JpqlParser.Exists_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExists_expression(JpqlParser.Exists_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAll_or_any_expression(JpqlParser.All_or_any_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAll_or_any_expression(JpqlParser.All_or_any_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComparison_expression(JpqlParser.Comparison_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComparison_expression(JpqlParser.Comparison_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComparison_operator(JpqlParser.Comparison_operatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComparison_operator(JpqlParser.Comparison_operatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArithmetic_expression(JpqlParser.Arithmetic_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArithmetic_expression(JpqlParser.Arithmetic_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArithmetic_term(JpqlParser.Arithmetic_termContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArithmetic_term(JpqlParser.Arithmetic_termContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArithmetic_factor(JpqlParser.Arithmetic_factorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArithmetic_factor(JpqlParser.Arithmetic_factorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArithmetic_primary(JpqlParser.Arithmetic_primaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArithmetic_primary(JpqlParser.Arithmetic_primaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterString_expression(JpqlParser.String_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitString_expression(JpqlParser.String_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetime_expression(JpqlParser.Datetime_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetime_expression(JpqlParser.Datetime_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolean_expression(JpqlParser.Boolean_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolean_expression(JpqlParser.Boolean_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnum_expression(JpqlParser.Enum_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnum_expression(JpqlParser.Enum_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEntity_expression(JpqlParser.Entity_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEntity_expression(JpqlParser.Entity_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_entity_expression(JpqlParser.Simple_entity_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_entity_expression(JpqlParser.Simple_entity_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEntity_type_expression(JpqlParser.Entity_type_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEntity_type_expression(JpqlParser.Entity_type_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterType_discriminator(JpqlParser.Type_discriminatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitType_discriminator(JpqlParser.Type_discriminatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctions_returning_numerics(JpqlParser.Functions_returning_numericsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctions_returning_numerics(JpqlParser.Functions_returning_numericsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctions_returning_datetime(JpqlParser.Functions_returning_datetimeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctions_returning_datetime(JpqlParser.Functions_returning_datetimeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctions_returning_strings(JpqlParser.Functions_returning_stringsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctions_returning_strings(JpqlParser.Functions_returning_stringsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTrim_specification(JpqlParser.Trim_specificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTrim_specification(JpqlParser.Trim_specificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunction_invocation(JpqlParser.Function_invocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunction_invocation(JpqlParser.Function_invocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExtract_datetime_field(JpqlParser.Extract_datetime_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExtract_datetime_field(JpqlParser.Extract_datetime_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetime_field(JpqlParser.Datetime_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetime_field(JpqlParser.Datetime_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExtract_datetime_part(JpqlParser.Extract_datetime_partContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExtract_datetime_part(JpqlParser.Extract_datetime_partContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetime_part(JpqlParser.Datetime_partContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetime_part(JpqlParser.Datetime_partContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunction_arg(JpqlParser.Function_argContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunction_arg(JpqlParser.Function_argContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCase_expression(JpqlParser.Case_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCase_expression(JpqlParser.Case_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGeneral_case_expression(JpqlParser.General_case_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGeneral_case_expression(JpqlParser.General_case_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhen_clause(JpqlParser.When_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhen_clause(JpqlParser.When_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_case_expression(JpqlParser.Simple_case_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_case_expression(JpqlParser.Simple_case_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCase_operand(JpqlParser.Case_operandContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCase_operand(JpqlParser.Case_operandContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimple_when_clause(JpqlParser.Simple_when_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimple_when_clause(JpqlParser.Simple_when_clauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCoalesce_expression(JpqlParser.Coalesce_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCoalesce_expression(JpqlParser.Coalesce_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNullif_expression(JpqlParser.Nullif_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNullif_expression(JpqlParser.Nullif_expressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTrim_character(JpqlParser.Trim_characterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTrim_character(JpqlParser.Trim_characterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIdentification_variable(JpqlParser.Identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIdentification_variable(JpqlParser.Identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstructor_name(JpqlParser.Constructor_nameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstructor_name(JpqlParser.Constructor_nameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLiteral(JpqlParser.LiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLiteral(JpqlParser.LiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInput_parameter(JpqlParser.Input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInput_parameter(JpqlParser.Input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPattern_value(JpqlParser.Pattern_valueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPattern_value(JpqlParser.Pattern_valueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDate_time_timestamp_literal(JpqlParser.Date_time_timestamp_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDate_time_timestamp_literal(JpqlParser.Date_time_timestamp_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEntity_type_literal(JpqlParser.Entity_type_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEntity_type_literal(JpqlParser.Entity_type_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEscape_character(JpqlParser.Escape_characterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEscape_character(JpqlParser.Escape_characterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNumeric_literal(JpqlParser.Numeric_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNumeric_literal(JpqlParser.Numeric_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolean_literal(JpqlParser.Boolean_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolean_literal(JpqlParser.Boolean_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnum_literal(JpqlParser.Enum_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnum_literal(JpqlParser.Enum_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterString_literal(JpqlParser.String_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitString_literal(JpqlParser.String_literalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingle_valued_embeddable_object_field(JpqlParser.Single_valued_embeddable_object_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingle_valued_embeddable_object_field(JpqlParser.Single_valued_embeddable_object_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubtype(JpqlParser.SubtypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubtype(JpqlParser.SubtypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollection_valued_field(JpqlParser.Collection_valued_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollection_valued_field(JpqlParser.Collection_valued_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingle_valued_object_field(JpqlParser.Single_valued_object_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingle_valued_object_field(JpqlParser.Single_valued_object_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterState_field(JpqlParser.State_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitState_field(JpqlParser.State_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollection_value_field(JpqlParser.Collection_value_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollection_value_field(JpqlParser.Collection_value_fieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEntity_name(JpqlParser.Entity_nameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEntity_name(JpqlParser.Entity_nameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResult_variable(JpqlParser.Result_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResult_variable(JpqlParser.Result_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSuperquery_identification_variable(JpqlParser.Superquery_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSuperquery_identification_variable(JpqlParser.Superquery_identification_variableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollection_valued_input_parameter(JpqlParser.Collection_valued_input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollection_valued_input_parameter(JpqlParser.Collection_valued_input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingle_valued_input_parameter(JpqlParser.Single_valued_input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingle_valued_input_parameter(JpqlParser.Single_valued_input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunction_name(JpqlParser.Function_nameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunction_name(JpqlParser.Function_nameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCharacter_valued_input_parameter(JpqlParser.Character_valued_input_parameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCharacter_valued_input_parameter(JpqlParser.Character_valued_input_parameterContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlLexer.java b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlLexer.java new file mode 100644 index 000000000..bb0f46ec2 --- /dev/null +++ b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlLexer.java @@ -0,0 +1,751 @@ +// Generated from Jpql.g4 by ANTLR 4.13.1 +package org.springframework.ide.vscode.jpql.antlr.parser; + +/** + * JPQL per https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#bnf + * + * This is JPA BNF for JPQL. There are gaps and inconsistencies in the BNF itself, explained by other fragments of the spec. + * + * @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf + * @author Greg Turnquist + * @author Christoph Strobl + * @since 3.1 + */ + +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", "CheckReturnValue", "this-escape"}) +public class JpqlLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, + T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, WS=16, ABS=17, + ALL=18, AND=19, ANY=20, AS=21, ASC=22, AVG=23, BETWEEN=24, BOTH=25, BY=26, + CASE=27, CEILING=28, COALESCE=29, CONCAT=30, COUNT=31, CURRENT_DATE=32, + CURRENT_TIME=33, CURRENT_TIMESTAMP=34, DATE=35, DATETIME=36, DELETE=37, + DESC=38, DISTINCT=39, END=40, ELSE=41, EMPTY=42, ENTRY=43, ESCAPE=44, + EXISTS=45, EXP=46, EXTRACT=47, FALSE=48, FETCH=49, FLOOR=50, FROM=51, + FUNCTION=52, GROUP=53, HAVING=54, IN=55, INDEX=56, INNER=57, IS=58, JOIN=59, + KEY=60, LEADING=61, LEFT=62, LENGTH=63, LIKE=64, LN=65, LOCAL=66, LOCATE=67, + LOWER=68, MAX=69, MEMBER=70, MIN=71, MOD=72, NEW=73, NOT=74, NULL=75, + NULLIF=76, OBJECT=77, OF=78, ON=79, OR=80, ORDER=81, OUTER=82, POWER=83, + ROUND=84, SELECT=85, SET=86, SIGN=87, SIZE=88, SOME=89, SQRT=90, SUBSTRING=91, + SUM=92, THEN=93, TIME=94, TRAILING=95, TREAT=96, TRIM=97, TRUE=98, TYPE=99, + UPDATE=100, UPPER=101, VALUE=102, WHEN=103, WHERE=104, EQUAL=105, NOT_EQUAL=106, + CHARACTER=107, IDENTIFICATION_VARIABLE=108, STRINGLITERAL=109, JAVASTRINGLITERAL=110, + FLOATLITERAL=111, INTLITERAL=112, LONGLITERAL=113, SPEL=114; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", + "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "WS", "A", "B", + "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", + "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "ABS", "ALL", "AND", + "ANY", "AS", "ASC", "AVG", "BETWEEN", "BOTH", "BY", "CASE", "CEILING", + "COALESCE", "CONCAT", "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "DATE", "DATETIME", "DELETE", "DESC", "DISTINCT", "END", "ELSE", "EMPTY", + "ENTRY", "ESCAPE", "EXISTS", "EXP", "EXTRACT", "FALSE", "FETCH", "FLOOR", + "FROM", "FUNCTION", "GROUP", "HAVING", "IN", "INDEX", "INNER", "IS", + "JOIN", "KEY", "LEADING", "LEFT", "LENGTH", "LIKE", "LN", "LOCAL", "LOCATE", + "LOWER", "MAX", "MEMBER", "MIN", "MOD", "NEW", "NOT", "NULL", "NULLIF", + "OBJECT", "OF", "ON", "OR", "ORDER", "OUTER", "POWER", "ROUND", "SELECT", + "SET", "SIGN", "SIZE", "SOME", "SQRT", "SUBSTRING", "SUM", "THEN", "TIME", + "TRAILING", "TREAT", "TRIM", "TRUE", "TYPE", "UPDATE", "UPPER", "VALUE", + "WHEN", "WHERE", "EQUAL", "NOT_EQUAL", "CHARACTER", "IDENTIFICATION_VARIABLE", + "STRINGLITERAL", "JAVASTRINGLITERAL", "FLOATLITERAL", "INTLITERAL", "LONGLITERAL", + "SPEL" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "','", "'('", "')'", "'.'", "'>'", "'>='", "'<'", "'<='", "'+'", + "'-'", "'*'", "'/'", "':'", "'?'", "'%'", null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, 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, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, "WS", "ABS", "ALL", "AND", "ANY", "AS", "ASC", + "AVG", "BETWEEN", "BOTH", "BY", "CASE", "CEILING", "COALESCE", "CONCAT", + "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATE", + "DATETIME", "DELETE", "DESC", "DISTINCT", "END", "ELSE", "EMPTY", "ENTRY", + "ESCAPE", "EXISTS", "EXP", "EXTRACT", "FALSE", "FETCH", "FLOOR", "FROM", + "FUNCTION", "GROUP", "HAVING", "IN", "INDEX", "INNER", "IS", "JOIN", + "KEY", "LEADING", "LEFT", "LENGTH", "LIKE", "LN", "LOCAL", "LOCATE", + "LOWER", "MAX", "MEMBER", "MIN", "MOD", "NEW", "NOT", "NULL", "NULLIF", + "OBJECT", "OF", "ON", "OR", "ORDER", "OUTER", "POWER", "ROUND", "SELECT", + "SET", "SIGN", "SIZE", "SOME", "SQRT", "SUBSTRING", "SUM", "THEN", "TIME", + "TRAILING", "TREAT", "TRIM", "TRUE", "TYPE", "UPDATE", "UPPER", "VALUE", + "WHEN", "WHERE", "EQUAL", "NOT_EQUAL", "CHARACTER", "IDENTIFICATION_VARIABLE", + "STRINGLITERAL", "JAVASTRINGLITERAL", "FLOATLITERAL", "INTLITERAL", "LONGLITERAL", + "SPEL" + }; + } + 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 JpqlLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "Jpql.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\u0000r\u03ce\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\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007"+ + "{\u0002|\u0007|\u0002}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002"+ + "\u0080\u0007\u0080\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002"+ + "\u0083\u0007\u0083\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002"+ + "\u0086\u0007\u0086\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002"+ + "\u0089\u0007\u0089\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b\u0001"+ + "\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011"+ + "\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+ + "\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017"+ + "\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+ + "\u0001\u001e\u0001\u001e\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"+ + "/\u00010\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00011\u0001"+ + "1\u00011\u00011\u00012\u00012\u00012\u00012\u00012\u00013\u00013\u0001"+ + "3\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u0001"+ + "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00019\u00019\u00019\u00019\u0001"+ + "9\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u00019\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@\u0001A\u0001A\u0001A\u0001A\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001"+ + "E\u0001E\u0001E\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001"+ + "G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001"+ + "H\u0001H\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001"+ + "J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001"+ + "R\u0001R\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ + "U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001"+ + "V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001"+ + "X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001"+ + "Z\u0001Z\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`\u0001a\u0001a\u0001a\u0001"+ + "a\u0001b\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001c\u0001d\u0001"+ + "d\u0001d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ + "e\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001g\u0001g\u0001"+ + "g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001j\u0001j\u0001j\u0001"+ + "j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+ + "l\u0001l\u0001l\u0001l\u0001l\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ + "m\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001o\u0001o\u0001"+ + "o\u0001o\u0001p\u0001p\u0001p\u0001p\u0001p\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001r\u0001s\u0001s\u0001s\u0001"+ + "s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001"+ + "v\u0001w\u0001w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001"+ + "x\u0001x\u0001x\u0001x\u0001x\u0001y\u0001y\u0001y\u0001y\u0001y\u0001"+ + "y\u0001z\u0001z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001{\u0001{\u0001"+ + "{\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001}\u0001"+ + "}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f"+ + "\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080"+ + "\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081"+ + "\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ + "\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0003\u0083\u037d\b\u0083"+ + "\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ + "\u0005\u0085\u0385\b\u0085\n\u0085\f\u0085\u0388\t\u0085\u0001\u0086\u0001"+ + "\u0086\u0005\u0086\u038c\b\u0086\n\u0086\f\u0086\u038f\t\u0086\u0001\u0086"+ + "\u0001\u0086\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0005\u0087"+ + "\u0397\b\u0087\n\u0087\f\u0087\u039a\t\u0087\u0001\u0087\u0001\u0087\u0001"+ + "\u0088\u0005\u0088\u039f\b\u0088\n\u0088\f\u0088\u03a2\t\u0088\u0001\u0088"+ + "\u0001\u0088\u0004\u0088\u03a6\b\u0088\u000b\u0088\f\u0088\u03a7\u0001"+ + "\u0088\u0001\u0088\u0004\u0088\u03ac\b\u0088\u000b\u0088\f\u0088\u03ad"+ + "\u0005\u0088\u03b0\b\u0088\n\u0088\f\u0088\u03b3\t\u0088\u0001\u0088\u0001"+ + "\u0088\u0003\u0088\u03b7\b\u0088\u0001\u0089\u0004\u0089\u03ba\b\u0089"+ + "\u000b\u0089\f\u0089\u03bb\u0001\u008a\u0004\u008a\u03bf\b\u008a\u000b"+ + "\u008a\f\u008a\u03c0\u0001\u008a\u0001\u008a\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0005\u008b\u03c8\b\u008b\n\u008b\f\u008b\u03cb\t\u008b\u0001\u008b"+ + "\u0001\u008b\u0001\u03c9\u0000\u008c\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!\u0000#\u0000"+ + "%\u0000\'\u0000)\u0000+\u0000-\u0000/\u00001\u00003\u00005\u00007\u0000"+ + "9\u0000;\u0000=\u0000?\u0000A\u0000C\u0000E\u0000G\u0000I\u0000K\u0000"+ + "M\u0000O\u0000Q\u0000S\u0000U\u0011W\u0012Y\u0013[\u0014]\u0015_\u0016"+ + "a\u0017c\u0018e\u0019g\u001ai\u001bk\u001cm\u001do\u001eq\u001fs u!w\""+ + "y#{$}%\u007f&\u0081\'\u0083(\u0085)\u0087*\u0089+\u008b,\u008d-\u008f"+ + ".\u0091/\u00930\u00951\u00972\u00993\u009b4\u009d5\u009f6\u00a17\u00a3"+ + "8\u00a59\u00a7:\u00a9;\u00ab<\u00ad=\u00af>\u00b1?\u00b3@\u00b5A\u00b7"+ + "B\u00b9C\u00bbD\u00bdE\u00bfF\u00c1G\u00c3H\u00c5I\u00c7J\u00c9K\u00cb"+ + "L\u00cdM\u00cfN\u00d1O\u00d3P\u00d5Q\u00d7R\u00d9S\u00dbT\u00ddU\u00df"+ + "V\u00e1W\u00e3X\u00e5Y\u00e7Z\u00e9[\u00eb\\\u00ed]\u00ef^\u00f1_\u00f3"+ + "`\u00f5a\u00f7b\u00f9c\u00fbd\u00fde\u00fff\u0101g\u0103h\u0105i\u0107"+ + "j\u0109k\u010bl\u010dm\u010fn\u0111o\u0113p\u0115q\u0117r\u0001\u0000"+ + " \u0003\u0000\t\n\r\r \u0002\u0000AAaa\u0002\u0000BBbb\u0002\u0000CC"+ + "cc\u0002\u0000DDdd\u0002\u0000EEee\u0002\u0000FFff\u0002\u0000GGgg\u0002"+ + "\u0000HHhh\u0002\u0000IIii\u0002\u0000JJjj\u0002\u0000KKkk\u0002\u0000"+ + "LLll\u0002\u0000MMmm\u0002\u0000NNnn\u0002\u0000OOoo\u0002\u0000PPpp\u0002"+ + "\u0000QQqq\u0002\u0000RRrr\u0002\u0000SSss\u0002\u0000TTtt\u0002\u0000"+ + "UUuu\u0002\u0000VVvv\u0002\u0000WWww\u0002\u0000XXxx\u0002\u0000YYyy\u0002"+ + "\u0000ZZzz\u0002\u0000\'\'\\\\\u0005\u0000$$AZ__az\u0080\u8000\ufffe\u0006"+ + "\u0000$$09AZ__az\u0080\u8000\ufffe\u0007\u0000\"\"\'\'bbffnnrrtt\u0001"+ + "\u0000\"\"\u03c1\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\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000"+ + "Y\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\u0000"+ + "g\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\u0000"+ + "u\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\u0000\u00e1\u0001\u0000\u0000"+ + "\u0000\u0000\u00e3\u0001\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000"+ + "\u0000\u0000\u00e7\u0001\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000"+ + "\u0000\u0000\u00eb\u0001\u0000\u0000\u0000\u0000\u00ed\u0001\u0000\u0000"+ + "\u0000\u0000\u00ef\u0001\u0000\u0000\u0000\u0000\u00f1\u0001\u0000\u0000"+ + "\u0000\u0000\u00f3\u0001\u0000\u0000\u0000\u0000\u00f5\u0001\u0000\u0000"+ + "\u0000\u0000\u00f7\u0001\u0000\u0000\u0000\u0000\u00f9\u0001\u0000\u0000"+ + "\u0000\u0000\u00fb\u0001\u0000\u0000\u0000\u0000\u00fd\u0001\u0000\u0000"+ + "\u0000\u0000\u00ff\u0001\u0000\u0000\u0000\u0000\u0101\u0001\u0000\u0000"+ + "\u0000\u0000\u0103\u0001\u0000\u0000\u0000\u0000\u0105\u0001\u0000\u0000"+ + "\u0000\u0000\u0107\u0001\u0000\u0000\u0000\u0000\u0109\u0001\u0000\u0000"+ + "\u0000\u0000\u010b\u0001\u0000\u0000\u0000\u0000\u010d\u0001\u0000\u0000"+ + "\u0000\u0000\u010f\u0001\u0000\u0000\u0000\u0000\u0111\u0001\u0000\u0000"+ + "\u0000\u0000\u0113\u0001\u0000\u0000\u0000\u0000\u0115\u0001\u0000\u0000"+ + "\u0000\u0000\u0117\u0001\u0000\u0000\u0000\u0001\u0119\u0001\u0000\u0000"+ + "\u0000\u0003\u011b\u0001\u0000\u0000\u0000\u0005\u011d\u0001\u0000\u0000"+ + "\u0000\u0007\u011f\u0001\u0000\u0000\u0000\t\u0121\u0001\u0000\u0000\u0000"+ + "\u000b\u0123\u0001\u0000\u0000\u0000\r\u0126\u0001\u0000\u0000\u0000\u000f"+ + "\u0128\u0001\u0000\u0000\u0000\u0011\u012b\u0001\u0000\u0000\u0000\u0013"+ + "\u012d\u0001\u0000\u0000\u0000\u0015\u012f\u0001\u0000\u0000\u0000\u0017"+ + "\u0131\u0001\u0000\u0000\u0000\u0019\u0133\u0001\u0000\u0000\u0000\u001b"+ + "\u0135\u0001\u0000\u0000\u0000\u001d\u0137\u0001\u0000\u0000\u0000\u001f"+ + "\u0139\u0001\u0000\u0000\u0000!\u013d\u0001\u0000\u0000\u0000#\u013f\u0001"+ + "\u0000\u0000\u0000%\u0141\u0001\u0000\u0000\u0000\'\u0143\u0001\u0000"+ + "\u0000\u0000)\u0145\u0001\u0000\u0000\u0000+\u0147\u0001\u0000\u0000\u0000"+ + "-\u0149\u0001\u0000\u0000\u0000/\u014b\u0001\u0000\u0000\u00001\u014d"+ + "\u0001\u0000\u0000\u00003\u014f\u0001\u0000\u0000\u00005\u0151\u0001\u0000"+ + "\u0000\u00007\u0153\u0001\u0000\u0000\u00009\u0155\u0001\u0000\u0000\u0000"+ + ";\u0157\u0001\u0000\u0000\u0000=\u0159\u0001\u0000\u0000\u0000?\u015b"+ + "\u0001\u0000\u0000\u0000A\u015d\u0001\u0000\u0000\u0000C\u015f\u0001\u0000"+ + "\u0000\u0000E\u0161\u0001\u0000\u0000\u0000G\u0163\u0001\u0000\u0000\u0000"+ + "I\u0165\u0001\u0000\u0000\u0000K\u0167\u0001\u0000\u0000\u0000M\u0169"+ + "\u0001\u0000\u0000\u0000O\u016b\u0001\u0000\u0000\u0000Q\u016d\u0001\u0000"+ + "\u0000\u0000S\u016f\u0001\u0000\u0000\u0000U\u0171\u0001\u0000\u0000\u0000"+ + "W\u0175\u0001\u0000\u0000\u0000Y\u0179\u0001\u0000\u0000\u0000[\u017d"+ + "\u0001\u0000\u0000\u0000]\u0181\u0001\u0000\u0000\u0000_\u0184\u0001\u0000"+ + "\u0000\u0000a\u0188\u0001\u0000\u0000\u0000c\u018c\u0001\u0000\u0000\u0000"+ + "e\u0194\u0001\u0000\u0000\u0000g\u0199\u0001\u0000\u0000\u0000i\u019c"+ + "\u0001\u0000\u0000\u0000k\u01a1\u0001\u0000\u0000\u0000m\u01a9\u0001\u0000"+ + "\u0000\u0000o\u01b2\u0001\u0000\u0000\u0000q\u01b9\u0001\u0000\u0000\u0000"+ + "s\u01bf\u0001\u0000\u0000\u0000u\u01cc\u0001\u0000\u0000\u0000w\u01d9"+ + "\u0001\u0000\u0000\u0000y\u01eb\u0001\u0000\u0000\u0000{\u01f0\u0001\u0000"+ + "\u0000\u0000}\u01f9\u0001\u0000\u0000\u0000\u007f\u0200\u0001\u0000\u0000"+ + "\u0000\u0081\u0205\u0001\u0000\u0000\u0000\u0083\u020e\u0001\u0000\u0000"+ + "\u0000\u0085\u0212\u0001\u0000\u0000\u0000\u0087\u0217\u0001\u0000\u0000"+ + "\u0000\u0089\u021d\u0001\u0000\u0000\u0000\u008b\u0223\u0001\u0000\u0000"+ + "\u0000\u008d\u022a\u0001\u0000\u0000\u0000\u008f\u0231\u0001\u0000\u0000"+ + "\u0000\u0091\u0235\u0001\u0000\u0000\u0000\u0093\u023d\u0001\u0000\u0000"+ + "\u0000\u0095\u0243\u0001\u0000\u0000\u0000\u0097\u0249\u0001\u0000\u0000"+ + "\u0000\u0099\u024f\u0001\u0000\u0000\u0000\u009b\u0254\u0001\u0000\u0000"+ + "\u0000\u009d\u025d\u0001\u0000\u0000\u0000\u009f\u0263\u0001\u0000\u0000"+ + "\u0000\u00a1\u026a\u0001\u0000\u0000\u0000\u00a3\u026d\u0001\u0000\u0000"+ + "\u0000\u00a5\u0273\u0001\u0000\u0000\u0000\u00a7\u0279\u0001\u0000\u0000"+ + "\u0000\u00a9\u027c\u0001\u0000\u0000\u0000\u00ab\u0281\u0001\u0000\u0000"+ + "\u0000\u00ad\u0285\u0001\u0000\u0000\u0000\u00af\u028d\u0001\u0000\u0000"+ + "\u0000\u00b1\u0292\u0001\u0000\u0000\u0000\u00b3\u0299\u0001\u0000\u0000"+ + "\u0000\u00b5\u029e\u0001\u0000\u0000\u0000\u00b7\u02a1\u0001\u0000\u0000"+ + "\u0000\u00b9\u02a7\u0001\u0000\u0000\u0000\u00bb\u02ae\u0001\u0000\u0000"+ + "\u0000\u00bd\u02b4\u0001\u0000\u0000\u0000\u00bf\u02b8\u0001\u0000\u0000"+ + "\u0000\u00c1\u02bf\u0001\u0000\u0000\u0000\u00c3\u02c3\u0001\u0000\u0000"+ + "\u0000\u00c5\u02c7\u0001\u0000\u0000\u0000\u00c7\u02cb\u0001\u0000\u0000"+ + "\u0000\u00c9\u02cf\u0001\u0000\u0000\u0000\u00cb\u02d4\u0001\u0000\u0000"+ + "\u0000\u00cd\u02db\u0001\u0000\u0000\u0000\u00cf\u02e2\u0001\u0000\u0000"+ + "\u0000\u00d1\u02e5\u0001\u0000\u0000\u0000\u00d3\u02e8\u0001\u0000\u0000"+ + "\u0000\u00d5\u02eb\u0001\u0000\u0000\u0000\u00d7\u02f1\u0001\u0000\u0000"+ + "\u0000\u00d9\u02f7\u0001\u0000\u0000\u0000\u00db\u02fd\u0001\u0000\u0000"+ + "\u0000\u00dd\u0303\u0001\u0000\u0000\u0000\u00df\u030a\u0001\u0000\u0000"+ + "\u0000\u00e1\u030e\u0001\u0000\u0000\u0000\u00e3\u0313\u0001\u0000\u0000"+ + "\u0000\u00e5\u0318\u0001\u0000\u0000\u0000\u00e7\u031d\u0001\u0000\u0000"+ + "\u0000\u00e9\u0322\u0001\u0000\u0000\u0000\u00eb\u032c\u0001\u0000\u0000"+ + "\u0000\u00ed\u0330\u0001\u0000\u0000\u0000\u00ef\u0335\u0001\u0000\u0000"+ + "\u0000\u00f1\u033a\u0001\u0000\u0000\u0000\u00f3\u0343\u0001\u0000\u0000"+ + "\u0000\u00f5\u0349\u0001\u0000\u0000\u0000\u00f7\u034e\u0001\u0000\u0000"+ + "\u0000\u00f9\u0353\u0001\u0000\u0000\u0000\u00fb\u0358\u0001\u0000\u0000"+ + "\u0000\u00fd\u035f\u0001\u0000\u0000\u0000\u00ff\u0365\u0001\u0000\u0000"+ + "\u0000\u0101\u036b\u0001\u0000\u0000\u0000\u0103\u0370\u0001\u0000\u0000"+ + "\u0000\u0105\u0376\u0001\u0000\u0000\u0000\u0107\u037c\u0001\u0000\u0000"+ + "\u0000\u0109\u037e\u0001\u0000\u0000\u0000\u010b\u0382\u0001\u0000\u0000"+ + "\u0000\u010d\u0389\u0001\u0000\u0000\u0000\u010f\u0392\u0001\u0000\u0000"+ + "\u0000\u0111\u03a0\u0001\u0000\u0000\u0000\u0113\u03b9\u0001\u0000\u0000"+ + "\u0000\u0115\u03be\u0001\u0000\u0000\u0000\u0117\u03c4\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0005,\u0000\u0000\u011a\u0002\u0001\u0000\u0000\u0000"+ + "\u011b\u011c\u0005(\u0000\u0000\u011c\u0004\u0001\u0000\u0000\u0000\u011d"+ + "\u011e\u0005)\u0000\u0000\u011e\u0006\u0001\u0000\u0000\u0000\u011f\u0120"+ + "\u0005.\u0000\u0000\u0120\b\u0001\u0000\u0000\u0000\u0121\u0122\u0005"+ + ">\u0000\u0000\u0122\n\u0001\u0000\u0000\u0000\u0123\u0124\u0005>\u0000"+ + "\u0000\u0124\u0125\u0005=\u0000\u0000\u0125\f\u0001\u0000\u0000\u0000"+ + "\u0126\u0127\u0005<\u0000\u0000\u0127\u000e\u0001\u0000\u0000\u0000\u0128"+ + "\u0129\u0005<\u0000\u0000\u0129\u012a\u0005=\u0000\u0000\u012a\u0010\u0001"+ + "\u0000\u0000\u0000\u012b\u012c\u0005+\u0000\u0000\u012c\u0012\u0001\u0000"+ + "\u0000\u0000\u012d\u012e\u0005-\u0000\u0000\u012e\u0014\u0001\u0000\u0000"+ + "\u0000\u012f\u0130\u0005*\u0000\u0000\u0130\u0016\u0001\u0000\u0000\u0000"+ + "\u0131\u0132\u0005/\u0000\u0000\u0132\u0018\u0001\u0000\u0000\u0000\u0133"+ + "\u0134\u0005:\u0000\u0000\u0134\u001a\u0001\u0000\u0000\u0000\u0135\u0136"+ + "\u0005?\u0000\u0000\u0136\u001c\u0001\u0000\u0000\u0000\u0137\u0138\u0005"+ + "%\u0000\u0000\u0138\u001e\u0001\u0000\u0000\u0000\u0139\u013a\u0007\u0000"+ + "\u0000\u0000\u013a\u013b\u0001\u0000\u0000\u0000\u013b\u013c\u0006\u000f"+ + "\u0000\u0000\u013c \u0001\u0000\u0000\u0000\u013d\u013e\u0007\u0001\u0000"+ + "\u0000\u013e\"\u0001\u0000\u0000\u0000\u013f\u0140\u0007\u0002\u0000\u0000"+ + "\u0140$\u0001\u0000\u0000\u0000\u0141\u0142\u0007\u0003\u0000\u0000\u0142"+ + "&\u0001\u0000\u0000\u0000\u0143\u0144\u0007\u0004\u0000\u0000\u0144(\u0001"+ + "\u0000\u0000\u0000\u0145\u0146\u0007\u0005\u0000\u0000\u0146*\u0001\u0000"+ + "\u0000\u0000\u0147\u0148\u0007\u0006\u0000\u0000\u0148,\u0001\u0000\u0000"+ + "\u0000\u0149\u014a\u0007\u0007\u0000\u0000\u014a.\u0001\u0000\u0000\u0000"+ + "\u014b\u014c\u0007\b\u0000\u0000\u014c0\u0001\u0000\u0000\u0000\u014d"+ + "\u014e\u0007\t\u0000\u0000\u014e2\u0001\u0000\u0000\u0000\u014f\u0150"+ + "\u0007\n\u0000\u0000\u01504\u0001\u0000\u0000\u0000\u0151\u0152\u0007"+ + "\u000b\u0000\u0000\u01526\u0001\u0000\u0000\u0000\u0153\u0154\u0007\f"+ + "\u0000\u0000\u01548\u0001\u0000\u0000\u0000\u0155\u0156\u0007\r\u0000"+ + "\u0000\u0156:\u0001\u0000\u0000\u0000\u0157\u0158\u0007\u000e\u0000\u0000"+ + "\u0158<\u0001\u0000\u0000\u0000\u0159\u015a\u0007\u000f\u0000\u0000\u015a"+ + ">\u0001\u0000\u0000\u0000\u015b\u015c\u0007\u0010\u0000\u0000\u015c@\u0001"+ + "\u0000\u0000\u0000\u015d\u015e\u0007\u0011\u0000\u0000\u015eB\u0001\u0000"+ + "\u0000\u0000\u015f\u0160\u0007\u0012\u0000\u0000\u0160D\u0001\u0000\u0000"+ + "\u0000\u0161\u0162\u0007\u0013\u0000\u0000\u0162F\u0001\u0000\u0000\u0000"+ + "\u0163\u0164\u0007\u0014\u0000\u0000\u0164H\u0001\u0000\u0000\u0000\u0165"+ + "\u0166\u0007\u0015\u0000\u0000\u0166J\u0001\u0000\u0000\u0000\u0167\u0168"+ + "\u0007\u0016\u0000\u0000\u0168L\u0001\u0000\u0000\u0000\u0169\u016a\u0007"+ + "\u0017\u0000\u0000\u016aN\u0001\u0000\u0000\u0000\u016b\u016c\u0007\u0018"+ + "\u0000\u0000\u016cP\u0001\u0000\u0000\u0000\u016d\u016e\u0007\u0019\u0000"+ + "\u0000\u016eR\u0001\u0000\u0000\u0000\u016f\u0170\u0007\u001a\u0000\u0000"+ + "\u0170T\u0001\u0000\u0000\u0000\u0171\u0172\u0003!\u0010\u0000\u0172\u0173"+ + "\u0003#\u0011\u0000\u0173\u0174\u0003E\"\u0000\u0174V\u0001\u0000\u0000"+ + "\u0000\u0175\u0176\u0003!\u0010\u0000\u0176\u0177\u00037\u001b\u0000\u0177"+ + "\u0178\u00037\u001b\u0000\u0178X\u0001\u0000\u0000\u0000\u0179\u017a\u0003"+ + "!\u0010\u0000\u017a\u017b\u0003;\u001d\u0000\u017b\u017c\u0003\'\u0013"+ + "\u0000\u017cZ\u0001\u0000\u0000\u0000\u017d\u017e\u0003!\u0010\u0000\u017e"+ + "\u017f\u0003;\u001d\u0000\u017f\u0180\u0003Q(\u0000\u0180\\\u0001\u0000"+ + "\u0000\u0000\u0181\u0182\u0003!\u0010\u0000\u0182\u0183\u0003E\"\u0000"+ + "\u0183^\u0001\u0000\u0000\u0000\u0184\u0185\u0003!\u0010\u0000\u0185\u0186"+ + "\u0003E\"\u0000\u0186\u0187\u0003%\u0012\u0000\u0187`\u0001\u0000\u0000"+ + "\u0000\u0188\u0189\u0003!\u0010\u0000\u0189\u018a\u0003K%\u0000\u018a"+ + "\u018b\u0003-\u0016\u0000\u018bb\u0001\u0000\u0000\u0000\u018c\u018d\u0003"+ + "#\u0011\u0000\u018d\u018e\u0003)\u0014\u0000\u018e\u018f\u0003G#\u0000"+ + "\u018f\u0190\u0003M&\u0000\u0190\u0191\u0003)\u0014\u0000\u0191\u0192"+ + "\u0003)\u0014\u0000\u0192\u0193\u0003;\u001d\u0000\u0193d\u0001\u0000"+ + "\u0000\u0000\u0194\u0195\u0003#\u0011\u0000\u0195\u0196\u0003=\u001e\u0000"+ + "\u0196\u0197\u0003G#\u0000\u0197\u0198\u0003/\u0017\u0000\u0198f\u0001"+ + "\u0000\u0000\u0000\u0199\u019a\u0003#\u0011\u0000\u019a\u019b\u0003Q("+ + "\u0000\u019bh\u0001\u0000\u0000\u0000\u019c\u019d\u0003%\u0012\u0000\u019d"+ + "\u019e\u0003!\u0010\u0000\u019e\u019f\u0003E\"\u0000\u019f\u01a0\u0003"+ + ")\u0014\u0000\u01a0j\u0001\u0000\u0000\u0000\u01a1\u01a2\u0003%\u0012"+ + "\u0000\u01a2\u01a3\u0003)\u0014\u0000\u01a3\u01a4\u00031\u0018\u0000\u01a4"+ + "\u01a5\u00037\u001b\u0000\u01a5\u01a6\u00031\u0018\u0000\u01a6\u01a7\u0003"+ + ";\u001d\u0000\u01a7\u01a8\u0003-\u0016\u0000\u01a8l\u0001\u0000\u0000"+ + "\u0000\u01a9\u01aa\u0003%\u0012\u0000\u01aa\u01ab\u0003=\u001e\u0000\u01ab"+ + "\u01ac\u0003!\u0010\u0000\u01ac\u01ad\u00037\u001b\u0000\u01ad\u01ae\u0003"+ + ")\u0014\u0000\u01ae\u01af\u0003E\"\u0000\u01af\u01b0\u0003%\u0012\u0000"+ + "\u01b0\u01b1\u0003)\u0014\u0000\u01b1n\u0001\u0000\u0000\u0000\u01b2\u01b3"+ + "\u0003%\u0012\u0000\u01b3\u01b4\u0003=\u001e\u0000\u01b4\u01b5\u0003;"+ + "\u001d\u0000\u01b5\u01b6\u0003%\u0012\u0000\u01b6\u01b7\u0003!\u0010\u0000"+ + "\u01b7\u01b8\u0003G#\u0000\u01b8p\u0001\u0000\u0000\u0000\u01b9\u01ba"+ + "\u0003%\u0012\u0000\u01ba\u01bb\u0003=\u001e\u0000\u01bb\u01bc\u0003I"+ + "$\u0000\u01bc\u01bd\u0003;\u001d\u0000\u01bd\u01be\u0003G#\u0000\u01be"+ + "r\u0001\u0000\u0000\u0000\u01bf\u01c0\u0003%\u0012\u0000\u01c0\u01c1\u0003"+ + "I$\u0000\u01c1\u01c2\u0003C!\u0000\u01c2\u01c3\u0003C!\u0000\u01c3\u01c4"+ + "\u0003)\u0014\u0000\u01c4\u01c5\u0003;\u001d\u0000\u01c5\u01c6\u0003G"+ + "#\u0000\u01c6\u01c7\u0005_\u0000\u0000\u01c7\u01c8\u0003\'\u0013\u0000"+ + "\u01c8\u01c9\u0003!\u0010\u0000\u01c9\u01ca\u0003G#\u0000\u01ca\u01cb"+ + "\u0003)\u0014\u0000\u01cbt\u0001\u0000\u0000\u0000\u01cc\u01cd\u0003%"+ + "\u0012\u0000\u01cd\u01ce\u0003I$\u0000\u01ce\u01cf\u0003C!\u0000\u01cf"+ + "\u01d0\u0003C!\u0000\u01d0\u01d1\u0003)\u0014\u0000\u01d1\u01d2\u0003"+ + ";\u001d\u0000\u01d2\u01d3\u0003G#\u0000\u01d3\u01d4\u0005_\u0000\u0000"+ + "\u01d4\u01d5\u0003G#\u0000\u01d5\u01d6\u00031\u0018\u0000\u01d6\u01d7"+ + "\u00039\u001c\u0000\u01d7\u01d8\u0003)\u0014\u0000\u01d8v\u0001\u0000"+ + "\u0000\u0000\u01d9\u01da\u0003%\u0012\u0000\u01da\u01db\u0003I$\u0000"+ + "\u01db\u01dc\u0003C!\u0000\u01dc\u01dd\u0003C!\u0000\u01dd\u01de\u0003"+ + ")\u0014\u0000\u01de\u01df\u0003;\u001d\u0000\u01df\u01e0\u0003G#\u0000"+ + "\u01e0\u01e1\u0005_\u0000\u0000\u01e1\u01e2\u0003G#\u0000\u01e2\u01e3"+ + "\u00031\u0018\u0000\u01e3\u01e4\u00039\u001c\u0000\u01e4\u01e5\u0003)"+ + "\u0014\u0000\u01e5\u01e6\u0003E\"\u0000\u01e6\u01e7\u0003G#\u0000\u01e7"+ + "\u01e8\u0003!\u0010\u0000\u01e8\u01e9\u00039\u001c\u0000\u01e9\u01ea\u0003"+ + "?\u001f\u0000\u01eax\u0001\u0000\u0000\u0000\u01eb\u01ec\u0003\'\u0013"+ + "\u0000\u01ec\u01ed\u0003!\u0010\u0000\u01ed\u01ee\u0003G#\u0000\u01ee"+ + "\u01ef\u0003)\u0014\u0000\u01efz\u0001\u0000\u0000\u0000\u01f0\u01f1\u0003"+ + "\'\u0013\u0000\u01f1\u01f2\u0003!\u0010\u0000\u01f2\u01f3\u0003G#\u0000"+ + "\u01f3\u01f4\u0003)\u0014\u0000\u01f4\u01f5\u0003G#\u0000\u01f5\u01f6"+ + "\u00031\u0018\u0000\u01f6\u01f7\u00039\u001c\u0000\u01f7\u01f8\u0003)"+ + "\u0014\u0000\u01f8|\u0001\u0000\u0000\u0000\u01f9\u01fa\u0003\'\u0013"+ + "\u0000\u01fa\u01fb\u0003)\u0014\u0000\u01fb\u01fc\u00037\u001b\u0000\u01fc"+ + "\u01fd\u0003)\u0014\u0000\u01fd\u01fe\u0003G#\u0000\u01fe\u01ff\u0003"+ + ")\u0014\u0000\u01ff~\u0001\u0000\u0000\u0000\u0200\u0201\u0003\'\u0013"+ + "\u0000\u0201\u0202\u0003)\u0014\u0000\u0202\u0203\u0003E\"\u0000\u0203"+ + "\u0204\u0003%\u0012\u0000\u0204\u0080\u0001\u0000\u0000\u0000\u0205\u0206"+ + "\u0003\'\u0013\u0000\u0206\u0207\u00031\u0018\u0000\u0207\u0208\u0003"+ + "E\"\u0000\u0208\u0209\u0003G#\u0000\u0209\u020a\u00031\u0018\u0000\u020a"+ + "\u020b\u0003;\u001d\u0000\u020b\u020c\u0003%\u0012\u0000\u020c\u020d\u0003"+ + "G#\u0000\u020d\u0082\u0001\u0000\u0000\u0000\u020e\u020f\u0003)\u0014"+ + "\u0000\u020f\u0210\u0003;\u001d\u0000\u0210\u0211\u0003\'\u0013\u0000"+ + "\u0211\u0084\u0001\u0000\u0000\u0000\u0212\u0213\u0003)\u0014\u0000\u0213"+ + "\u0214\u00037\u001b\u0000\u0214\u0215\u0003E\"\u0000\u0215\u0216\u0003"+ + ")\u0014\u0000\u0216\u0086\u0001\u0000\u0000\u0000\u0217\u0218\u0003)\u0014"+ + "\u0000\u0218\u0219\u00039\u001c\u0000\u0219\u021a\u0003?\u001f\u0000\u021a"+ + "\u021b\u0003G#\u0000\u021b\u021c\u0003Q(\u0000\u021c\u0088\u0001\u0000"+ + "\u0000\u0000\u021d\u021e\u0003)\u0014\u0000\u021e\u021f\u0003;\u001d\u0000"+ + "\u021f\u0220\u0003G#\u0000\u0220\u0221\u0003C!\u0000\u0221\u0222\u0003"+ + "Q(\u0000\u0222\u008a\u0001\u0000\u0000\u0000\u0223\u0224\u0003)\u0014"+ + "\u0000\u0224\u0225\u0003E\"\u0000\u0225\u0226\u0003%\u0012\u0000\u0226"+ + "\u0227\u0003!\u0010\u0000\u0227\u0228\u0003?\u001f\u0000\u0228\u0229\u0003"+ + ")\u0014\u0000\u0229\u008c\u0001\u0000\u0000\u0000\u022a\u022b\u0003)\u0014"+ + "\u0000\u022b\u022c\u0003O\'\u0000\u022c\u022d\u00031\u0018\u0000\u022d"+ + "\u022e\u0003E\"\u0000\u022e\u022f\u0003G#\u0000\u022f\u0230\u0003E\"\u0000"+ + "\u0230\u008e\u0001\u0000\u0000\u0000\u0231\u0232\u0003)\u0014\u0000\u0232"+ + "\u0233\u0003O\'\u0000\u0233\u0234\u0003?\u001f\u0000\u0234\u0090\u0001"+ + "\u0000\u0000\u0000\u0235\u0236\u0003)\u0014\u0000\u0236\u0237\u0003O\'"+ + "\u0000\u0237\u0238\u0003G#\u0000\u0238\u0239\u0003C!\u0000\u0239\u023a"+ + "\u0003!\u0010\u0000\u023a\u023b\u0003%\u0012\u0000\u023b\u023c\u0003G"+ + "#\u0000\u023c\u0092\u0001\u0000\u0000\u0000\u023d\u023e\u0003+\u0015\u0000"+ + "\u023e\u023f\u0003!\u0010\u0000\u023f\u0240\u00037\u001b\u0000\u0240\u0241"+ + "\u0003E\"\u0000\u0241\u0242\u0003)\u0014\u0000\u0242\u0094\u0001\u0000"+ + "\u0000\u0000\u0243\u0244\u0003+\u0015\u0000\u0244\u0245\u0003)\u0014\u0000"+ + "\u0245\u0246\u0003G#\u0000\u0246\u0247\u0003%\u0012\u0000\u0247\u0248"+ + "\u0003/\u0017\u0000\u0248\u0096\u0001\u0000\u0000\u0000\u0249\u024a\u0003"+ + "+\u0015\u0000\u024a\u024b\u00037\u001b\u0000\u024b\u024c\u0003=\u001e"+ + "\u0000\u024c\u024d\u0003=\u001e\u0000\u024d\u024e\u0003C!\u0000\u024e"+ + "\u0098\u0001\u0000\u0000\u0000\u024f\u0250\u0003+\u0015\u0000\u0250\u0251"+ + "\u0003C!\u0000\u0251\u0252\u0003=\u001e\u0000\u0252\u0253\u00039\u001c"+ + "\u0000\u0253\u009a\u0001\u0000\u0000\u0000\u0254\u0255\u0003+\u0015\u0000"+ + "\u0255\u0256\u0003I$\u0000\u0256\u0257\u0003;\u001d\u0000\u0257\u0258"+ + "\u0003%\u0012\u0000\u0258\u0259\u0003G#\u0000\u0259\u025a\u00031\u0018"+ + "\u0000\u025a\u025b\u0003=\u001e\u0000\u025b\u025c\u0003;\u001d\u0000\u025c"+ + "\u009c\u0001\u0000\u0000\u0000\u025d\u025e\u0003-\u0016\u0000\u025e\u025f"+ + "\u0003C!\u0000\u025f\u0260\u0003=\u001e\u0000\u0260\u0261\u0003I$\u0000"+ + "\u0261\u0262\u0003?\u001f\u0000\u0262\u009e\u0001\u0000\u0000\u0000\u0263"+ + "\u0264\u0003/\u0017\u0000\u0264\u0265\u0003!\u0010\u0000\u0265\u0266\u0003"+ + "K%\u0000\u0266\u0267\u00031\u0018\u0000\u0267\u0268\u0003;\u001d\u0000"+ + "\u0268\u0269\u0003-\u0016\u0000\u0269\u00a0\u0001\u0000\u0000\u0000\u026a"+ + "\u026b\u00031\u0018\u0000\u026b\u026c\u0003;\u001d\u0000\u026c\u00a2\u0001"+ + "\u0000\u0000\u0000\u026d\u026e\u00031\u0018\u0000\u026e\u026f\u0003;\u001d"+ + "\u0000\u026f\u0270\u0003\'\u0013\u0000\u0270\u0271\u0003)\u0014\u0000"+ + "\u0271\u0272\u0003O\'\u0000\u0272\u00a4\u0001\u0000\u0000\u0000\u0273"+ + "\u0274\u00031\u0018\u0000\u0274\u0275\u0003;\u001d\u0000\u0275\u0276\u0003"+ + ";\u001d\u0000\u0276\u0277\u0003)\u0014\u0000\u0277\u0278\u0003C!\u0000"+ + "\u0278\u00a6\u0001\u0000\u0000\u0000\u0279\u027a\u00031\u0018\u0000\u027a"+ + "\u027b\u0003E\"\u0000\u027b\u00a8\u0001\u0000\u0000\u0000\u027c\u027d"+ + "\u00033\u0019\u0000\u027d\u027e\u0003=\u001e\u0000\u027e\u027f\u00031"+ + "\u0018\u0000\u027f\u0280\u0003;\u001d\u0000\u0280\u00aa\u0001\u0000\u0000"+ + "\u0000\u0281\u0282\u00035\u001a\u0000\u0282\u0283\u0003)\u0014\u0000\u0283"+ + "\u0284\u0003Q(\u0000\u0284\u00ac\u0001\u0000\u0000\u0000\u0285\u0286\u0003"+ + "7\u001b\u0000\u0286\u0287\u0003)\u0014\u0000\u0287\u0288\u0003!\u0010"+ + "\u0000\u0288\u0289\u0003\'\u0013\u0000\u0289\u028a\u00031\u0018\u0000"+ + "\u028a\u028b\u0003;\u001d\u0000\u028b\u028c\u0003-\u0016\u0000\u028c\u00ae"+ + "\u0001\u0000\u0000\u0000\u028d\u028e\u00037\u001b\u0000\u028e\u028f\u0003"+ + ")\u0014\u0000\u028f\u0290\u0003+\u0015\u0000\u0290\u0291\u0003G#\u0000"+ + "\u0291\u00b0\u0001\u0000\u0000\u0000\u0292\u0293\u00037\u001b\u0000\u0293"+ + "\u0294\u0003)\u0014\u0000\u0294\u0295\u0003;\u001d\u0000\u0295\u0296\u0003"+ + "-\u0016\u0000\u0296\u0297\u0003G#\u0000\u0297\u0298\u0003/\u0017\u0000"+ + "\u0298\u00b2\u0001\u0000\u0000\u0000\u0299\u029a\u00037\u001b\u0000\u029a"+ + "\u029b\u00031\u0018\u0000\u029b\u029c\u00035\u001a\u0000\u029c\u029d\u0003"+ + ")\u0014\u0000\u029d\u00b4\u0001\u0000\u0000\u0000\u029e\u029f\u00037\u001b"+ + "\u0000\u029f\u02a0\u0003;\u001d\u0000\u02a0\u00b6\u0001\u0000\u0000\u0000"+ + "\u02a1\u02a2\u00037\u001b\u0000\u02a2\u02a3\u0003=\u001e\u0000\u02a3\u02a4"+ + "\u0003%\u0012\u0000\u02a4\u02a5\u0003!\u0010\u0000\u02a5\u02a6\u00037"+ + "\u001b\u0000\u02a6\u00b8\u0001\u0000\u0000\u0000\u02a7\u02a8\u00037\u001b"+ + "\u0000\u02a8\u02a9\u0003=\u001e\u0000\u02a9\u02aa\u0003%\u0012\u0000\u02aa"+ + "\u02ab\u0003!\u0010\u0000\u02ab\u02ac\u0003G#\u0000\u02ac\u02ad\u0003"+ + ")\u0014\u0000\u02ad\u00ba\u0001\u0000\u0000\u0000\u02ae\u02af\u00037\u001b"+ + "\u0000\u02af\u02b0\u0003=\u001e\u0000\u02b0\u02b1\u0003M&\u0000\u02b1"+ + "\u02b2\u0003)\u0014\u0000\u02b2\u02b3\u0003C!\u0000\u02b3\u00bc\u0001"+ + "\u0000\u0000\u0000\u02b4\u02b5\u00039\u001c\u0000\u02b5\u02b6\u0003!\u0010"+ + "\u0000\u02b6\u02b7\u0003O\'\u0000\u02b7\u00be\u0001\u0000\u0000\u0000"+ + "\u02b8\u02b9\u00039\u001c\u0000\u02b9\u02ba\u0003)\u0014\u0000\u02ba\u02bb"+ + "\u00039\u001c\u0000\u02bb\u02bc\u0003#\u0011\u0000\u02bc\u02bd\u0003)"+ + "\u0014\u0000\u02bd\u02be\u0003C!\u0000\u02be\u00c0\u0001\u0000\u0000\u0000"+ + "\u02bf\u02c0\u00039\u001c\u0000\u02c0\u02c1\u00031\u0018\u0000\u02c1\u02c2"+ + "\u0003;\u001d\u0000\u02c2\u00c2\u0001\u0000\u0000\u0000\u02c3\u02c4\u0003"+ + "9\u001c\u0000\u02c4\u02c5\u0003=\u001e\u0000\u02c5\u02c6\u0003\'\u0013"+ + "\u0000\u02c6\u00c4\u0001\u0000\u0000\u0000\u02c7\u02c8\u0003;\u001d\u0000"+ + "\u02c8\u02c9\u0003)\u0014\u0000\u02c9\u02ca\u0003M&\u0000\u02ca\u00c6"+ + "\u0001\u0000\u0000\u0000\u02cb\u02cc\u0003;\u001d\u0000\u02cc\u02cd\u0003"+ + "=\u001e\u0000\u02cd\u02ce\u0003G#\u0000\u02ce\u00c8\u0001\u0000\u0000"+ + "\u0000\u02cf\u02d0\u0003;\u001d\u0000\u02d0\u02d1\u0003I$\u0000\u02d1"+ + "\u02d2\u00037\u001b\u0000\u02d2\u02d3\u00037\u001b\u0000\u02d3\u00ca\u0001"+ + "\u0000\u0000\u0000\u02d4\u02d5\u0003;\u001d\u0000\u02d5\u02d6\u0003I$"+ + "\u0000\u02d6\u02d7\u00037\u001b\u0000\u02d7\u02d8\u00037\u001b\u0000\u02d8"+ + "\u02d9\u00031\u0018\u0000\u02d9\u02da\u0003+\u0015\u0000\u02da\u00cc\u0001"+ + "\u0000\u0000\u0000\u02db\u02dc\u0003=\u001e\u0000\u02dc\u02dd\u0003#\u0011"+ + "\u0000\u02dd\u02de\u00033\u0019\u0000\u02de\u02df\u0003)\u0014\u0000\u02df"+ + "\u02e0\u0003%\u0012\u0000\u02e0\u02e1\u0003G#\u0000\u02e1\u00ce\u0001"+ + "\u0000\u0000\u0000\u02e2\u02e3\u0003=\u001e\u0000\u02e3\u02e4\u0003+\u0015"+ + "\u0000\u02e4\u00d0\u0001\u0000\u0000\u0000\u02e5\u02e6\u0003=\u001e\u0000"+ + "\u02e6\u02e7\u0003;\u001d\u0000\u02e7\u00d2\u0001\u0000\u0000\u0000\u02e8"+ + "\u02e9\u0003=\u001e\u0000\u02e9\u02ea\u0003C!\u0000\u02ea\u00d4\u0001"+ + "\u0000\u0000\u0000\u02eb\u02ec\u0003=\u001e\u0000\u02ec\u02ed\u0003C!"+ + "\u0000\u02ed\u02ee\u0003\'\u0013\u0000\u02ee\u02ef\u0003)\u0014\u0000"+ + "\u02ef\u02f0\u0003C!\u0000\u02f0\u00d6\u0001\u0000\u0000\u0000\u02f1\u02f2"+ + "\u0003=\u001e\u0000\u02f2\u02f3\u0003I$\u0000\u02f3\u02f4\u0003G#\u0000"+ + "\u02f4\u02f5\u0003)\u0014\u0000\u02f5\u02f6\u0003C!\u0000\u02f6\u00d8"+ + "\u0001\u0000\u0000\u0000\u02f7\u02f8\u0003?\u001f\u0000\u02f8\u02f9\u0003"+ + "=\u001e\u0000\u02f9\u02fa\u0003M&\u0000\u02fa\u02fb\u0003)\u0014\u0000"+ + "\u02fb\u02fc\u0003C!\u0000\u02fc\u00da\u0001\u0000\u0000\u0000\u02fd\u02fe"+ + "\u0003C!\u0000\u02fe\u02ff\u0003=\u001e\u0000\u02ff\u0300\u0003I$\u0000"+ + "\u0300\u0301\u0003;\u001d\u0000\u0301\u0302\u0003\'\u0013\u0000\u0302"+ + "\u00dc\u0001\u0000\u0000\u0000\u0303\u0304\u0003E\"\u0000\u0304\u0305"+ + "\u0003)\u0014\u0000\u0305\u0306\u00037\u001b\u0000\u0306\u0307\u0003)"+ + "\u0014\u0000\u0307\u0308\u0003%\u0012\u0000\u0308\u0309\u0003G#\u0000"+ + "\u0309\u00de\u0001\u0000\u0000\u0000\u030a\u030b\u0003E\"\u0000\u030b"+ + "\u030c\u0003)\u0014\u0000\u030c\u030d\u0003G#\u0000\u030d\u00e0\u0001"+ + "\u0000\u0000\u0000\u030e\u030f\u0003E\"\u0000\u030f\u0310\u00031\u0018"+ + "\u0000\u0310\u0311\u0003-\u0016\u0000\u0311\u0312\u0003;\u001d\u0000\u0312"+ + "\u00e2\u0001\u0000\u0000\u0000\u0313\u0314\u0003E\"\u0000\u0314\u0315"+ + "\u00031\u0018\u0000\u0315\u0316\u0003S)\u0000\u0316\u0317\u0003)\u0014"+ + "\u0000\u0317\u00e4\u0001\u0000\u0000\u0000\u0318\u0319\u0003E\"\u0000"+ + "\u0319\u031a\u0003=\u001e\u0000\u031a\u031b\u00039\u001c\u0000\u031b\u031c"+ + "\u0003)\u0014\u0000\u031c\u00e6\u0001\u0000\u0000\u0000\u031d\u031e\u0003"+ + "E\"\u0000\u031e\u031f\u0003A \u0000\u031f\u0320\u0003C!\u0000\u0320\u0321"+ + "\u0003G#\u0000\u0321\u00e8\u0001\u0000\u0000\u0000\u0322\u0323\u0003E"+ + "\"\u0000\u0323\u0324\u0003I$\u0000\u0324\u0325\u0003#\u0011\u0000\u0325"+ + "\u0326\u0003E\"\u0000\u0326\u0327\u0003G#\u0000\u0327\u0328\u0003C!\u0000"+ + "\u0328\u0329\u00031\u0018\u0000\u0329\u032a\u0003;\u001d\u0000\u032a\u032b"+ + "\u0003-\u0016\u0000\u032b\u00ea\u0001\u0000\u0000\u0000\u032c\u032d\u0003"+ + "E\"\u0000\u032d\u032e\u0003I$\u0000\u032e\u032f\u00039\u001c\u0000\u032f"+ + "\u00ec\u0001\u0000\u0000\u0000\u0330\u0331\u0003G#\u0000\u0331\u0332\u0003"+ + "/\u0017\u0000\u0332\u0333\u0003)\u0014\u0000\u0333\u0334\u0003;\u001d"+ + "\u0000\u0334\u00ee\u0001\u0000\u0000\u0000\u0335\u0336\u0003G#\u0000\u0336"+ + "\u0337\u00031\u0018\u0000\u0337\u0338\u00039\u001c\u0000\u0338\u0339\u0003"+ + ")\u0014\u0000\u0339\u00f0\u0001\u0000\u0000\u0000\u033a\u033b\u0003G#"+ + "\u0000\u033b\u033c\u0003C!\u0000\u033c\u033d\u0003!\u0010\u0000\u033d"+ + "\u033e\u00031\u0018\u0000\u033e\u033f\u00037\u001b\u0000\u033f\u0340\u0003"+ + "1\u0018\u0000\u0340\u0341\u0003;\u001d\u0000\u0341\u0342\u0003-\u0016"+ + "\u0000\u0342\u00f2\u0001\u0000\u0000\u0000\u0343\u0344\u0003G#\u0000\u0344"+ + "\u0345\u0003C!\u0000\u0345\u0346\u0003)\u0014\u0000\u0346\u0347\u0003"+ + "!\u0010\u0000\u0347\u0348\u0003G#\u0000\u0348\u00f4\u0001\u0000\u0000"+ + "\u0000\u0349\u034a\u0003G#\u0000\u034a\u034b\u0003C!\u0000\u034b\u034c"+ + "\u00031\u0018\u0000\u034c\u034d\u00039\u001c\u0000\u034d\u00f6\u0001\u0000"+ + "\u0000\u0000\u034e\u034f\u0003G#\u0000\u034f\u0350\u0003C!\u0000\u0350"+ + "\u0351\u0003I$\u0000\u0351\u0352\u0003)\u0014\u0000\u0352\u00f8\u0001"+ + "\u0000\u0000\u0000\u0353\u0354\u0003G#\u0000\u0354\u0355\u0003Q(\u0000"+ + "\u0355\u0356\u0003?\u001f\u0000\u0356\u0357\u0003)\u0014\u0000\u0357\u00fa"+ + "\u0001\u0000\u0000\u0000\u0358\u0359\u0003I$\u0000\u0359\u035a\u0003?"+ + "\u001f\u0000\u035a\u035b\u0003\'\u0013\u0000\u035b\u035c\u0003!\u0010"+ + "\u0000\u035c\u035d\u0003G#\u0000\u035d\u035e\u0003)\u0014\u0000\u035e"+ + "\u00fc\u0001\u0000\u0000\u0000\u035f\u0360\u0003I$\u0000\u0360\u0361\u0003"+ + "?\u001f\u0000\u0361\u0362\u0003?\u001f\u0000\u0362\u0363\u0003)\u0014"+ + "\u0000\u0363\u0364\u0003C!\u0000\u0364\u00fe\u0001\u0000\u0000\u0000\u0365"+ + "\u0366\u0003K%\u0000\u0366\u0367\u0003!\u0010\u0000\u0367\u0368\u0003"+ + "7\u001b\u0000\u0368\u0369\u0003I$\u0000\u0369\u036a\u0003)\u0014\u0000"+ + "\u036a\u0100\u0001\u0000\u0000\u0000\u036b\u036c\u0003M&\u0000\u036c\u036d"+ + "\u0003/\u0017\u0000\u036d\u036e\u0003)\u0014\u0000\u036e\u036f\u0003;"+ + "\u001d\u0000\u036f\u0102\u0001\u0000\u0000\u0000\u0370\u0371\u0003M&\u0000"+ + "\u0371\u0372\u0003/\u0017\u0000\u0372\u0373\u0003)\u0014\u0000\u0373\u0374"+ + "\u0003C!\u0000\u0374\u0375\u0003)\u0014\u0000\u0375\u0104\u0001\u0000"+ + "\u0000\u0000\u0376\u0377\u0005=\u0000\u0000\u0377\u0106\u0001\u0000\u0000"+ + "\u0000\u0378\u0379\u0005<\u0000\u0000\u0379\u037d\u0005>\u0000\u0000\u037a"+ + "\u037b\u0005!\u0000\u0000\u037b\u037d\u0005=\u0000\u0000\u037c\u0378\u0001"+ + "\u0000\u0000\u0000\u037c\u037a\u0001\u0000\u0000\u0000\u037d\u0108\u0001"+ + "\u0000\u0000\u0000\u037e\u037f\u0005\'\u0000\u0000\u037f\u0380\b\u001b"+ + "\u0000\u0000\u0380\u0381\u0005\'\u0000\u0000\u0381\u010a\u0001\u0000\u0000"+ + "\u0000\u0382\u0386\u0007\u001c\u0000\u0000\u0383\u0385\u0007\u001d\u0000"+ + "\u0000\u0384\u0383\u0001\u0000\u0000\u0000\u0385\u0388\u0001\u0000\u0000"+ + "\u0000\u0386\u0384\u0001\u0000\u0000\u0000\u0386\u0387\u0001\u0000\u0000"+ + "\u0000\u0387\u010c\u0001\u0000\u0000\u0000\u0388\u0386\u0001\u0000\u0000"+ + "\u0000\u0389\u038d\u0005\'\u0000\u0000\u038a\u038c\b\u001b\u0000\u0000"+ + "\u038b\u038a\u0001\u0000\u0000\u0000\u038c\u038f\u0001\u0000\u0000\u0000"+ + "\u038d\u038b\u0001\u0000\u0000\u0000\u038d\u038e\u0001\u0000\u0000\u0000"+ + "\u038e\u0390\u0001\u0000\u0000\u0000\u038f\u038d\u0001\u0000\u0000\u0000"+ + "\u0390\u0391\u0005\'\u0000\u0000\u0391\u010e\u0001\u0000\u0000\u0000\u0392"+ + "\u0398\u0005\"\u0000\u0000\u0393\u0394\u0005\\\u0000\u0000\u0394\u0397"+ + "\u0007\u001e\u0000\u0000\u0395\u0397\b\u001f\u0000\u0000\u0396\u0393\u0001"+ + "\u0000\u0000\u0000\u0396\u0395\u0001\u0000\u0000\u0000\u0397\u039a\u0001"+ + "\u0000\u0000\u0000\u0398\u0396\u0001\u0000\u0000\u0000\u0398\u0399\u0001"+ + "\u0000\u0000\u0000\u0399\u039b\u0001\u0000\u0000\u0000\u039a\u0398\u0001"+ + "\u0000\u0000\u0000\u039b\u039c\u0005\"\u0000\u0000\u039c\u0110\u0001\u0000"+ + "\u0000\u0000\u039d\u039f\u000209\u0000\u039e\u039d\u0001\u0000\u0000\u0000"+ + "\u039f\u03a2\u0001\u0000\u0000\u0000\u03a0\u039e\u0001\u0000\u0000\u0000"+ + "\u03a0\u03a1\u0001\u0000\u0000\u0000\u03a1\u03a3\u0001\u0000\u0000\u0000"+ + "\u03a2\u03a0\u0001\u0000\u0000\u0000\u03a3\u03a5\u0005.\u0000\u0000\u03a4"+ + "\u03a6\u000209\u0000\u03a5\u03a4\u0001\u0000\u0000\u0000\u03a6\u03a7\u0001"+ + "\u0000\u0000\u0000\u03a7\u03a5\u0001\u0000\u0000\u0000\u03a7\u03a8\u0001"+ + "\u0000\u0000\u0000\u03a8\u03b1\u0001\u0000\u0000\u0000\u03a9\u03ab\u0003"+ + ")\u0014\u0000\u03aa\u03ac\u000209\u0000\u03ab\u03aa\u0001\u0000\u0000"+ + "\u0000\u03ac\u03ad\u0001\u0000\u0000\u0000\u03ad\u03ab\u0001\u0000\u0000"+ + "\u0000\u03ad\u03ae\u0001\u0000\u0000\u0000\u03ae\u03b0\u0001\u0000\u0000"+ + "\u0000\u03af\u03a9\u0001\u0000\u0000\u0000\u03b0\u03b3\u0001\u0000\u0000"+ + "\u0000\u03b1\u03af\u0001\u0000\u0000\u0000\u03b1\u03b2\u0001\u0000\u0000"+ + "\u0000\u03b2\u03b6\u0001\u0000\u0000\u0000\u03b3\u03b1\u0001\u0000\u0000"+ + "\u0000\u03b4\u03b7\u0003+\u0015\u0000\u03b5\u03b7\u0003\'\u0013\u0000"+ + "\u03b6\u03b4\u0001\u0000\u0000\u0000\u03b6\u03b5\u0001\u0000\u0000\u0000"+ + "\u03b6\u03b7\u0001\u0000\u0000\u0000\u03b7\u0112\u0001\u0000\u0000\u0000"+ + "\u03b8\u03ba\u000209\u0000\u03b9\u03b8\u0001\u0000\u0000\u0000\u03ba\u03bb"+ + "\u0001\u0000\u0000\u0000\u03bb\u03b9\u0001\u0000\u0000\u0000\u03bb\u03bc"+ + "\u0001\u0000\u0000\u0000\u03bc\u0114\u0001\u0000\u0000\u0000\u03bd\u03bf"+ + "\u000209\u0000\u03be\u03bd\u0001\u0000\u0000\u0000\u03bf\u03c0\u0001\u0000"+ + "\u0000\u0000\u03c0\u03be\u0001\u0000\u0000\u0000\u03c0\u03c1\u0001\u0000"+ + "\u0000\u0000\u03c1\u03c2\u0001\u0000\u0000\u0000\u03c2\u03c3\u00037\u001b"+ + "\u0000\u03c3\u0116\u0001\u0000\u0000\u0000\u03c4\u03c5\u0005$\u0000\u0000"+ + "\u03c5\u03c9\u0005{\u0000\u0000\u03c6\u03c8\t\u0000\u0000\u0000\u03c7"+ + "\u03c6\u0001\u0000\u0000\u0000\u03c8\u03cb\u0001\u0000\u0000\u0000\u03c9"+ + "\u03ca\u0001\u0000\u0000\u0000\u03c9\u03c7\u0001\u0000\u0000\u0000\u03ca"+ + "\u03cc\u0001\u0000\u0000\u0000\u03cb\u03c9\u0001\u0000\u0000\u0000\u03cc"+ + "\u03cd\u0005}\u0000\u0000\u03cd\u0118\u0001\u0000\u0000\u0000\u000e\u0000"+ + "\u037c\u0386\u038d\u0396\u0398\u03a0\u03a7\u03ad\u03b1\u03b6\u03bb\u03c0"+ + "\u03c9\u0001\u0006\u0000\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/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlListener.java b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlListener.java new file mode 100644 index 000000000..efe8860af --- /dev/null +++ b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlListener.java @@ -0,0 +1,1312 @@ +// Generated from Jpql.g4 by ANTLR 4.13.1 +package org.springframework.ide.vscode.jpql.antlr.parser; + +/** + * JPQL per https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#bnf + * + * This is JPA BNF for JPQL. There are gaps and inconsistencies in the BNF itself, explained by other fragments of the spec. + * + * @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf + * @author Greg Turnquist + * @author Christoph Strobl + * @since 3.1 + */ + +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link JpqlParser}. + */ +public interface JpqlListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link JpqlParser#start}. + * @param ctx the parse tree + */ + void enterStart(JpqlParser.StartContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#start}. + * @param ctx the parse tree + */ + void exitStart(JpqlParser.StartContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#ql_statement}. + * @param ctx the parse tree + */ + void enterQl_statement(JpqlParser.Ql_statementContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#ql_statement}. + * @param ctx the parse tree + */ + void exitQl_statement(JpqlParser.Ql_statementContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#select_statement}. + * @param ctx the parse tree + */ + void enterSelect_statement(JpqlParser.Select_statementContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#select_statement}. + * @param ctx the parse tree + */ + void exitSelect_statement(JpqlParser.Select_statementContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#update_statement}. + * @param ctx the parse tree + */ + void enterUpdate_statement(JpqlParser.Update_statementContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#update_statement}. + * @param ctx the parse tree + */ + void exitUpdate_statement(JpqlParser.Update_statementContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#delete_statement}. + * @param ctx the parse tree + */ + void enterDelete_statement(JpqlParser.Delete_statementContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#delete_statement}. + * @param ctx the parse tree + */ + void exitDelete_statement(JpqlParser.Delete_statementContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#from_clause}. + * @param ctx the parse tree + */ + void enterFrom_clause(JpqlParser.From_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#from_clause}. + * @param ctx the parse tree + */ + void exitFrom_clause(JpqlParser.From_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#identificationVariableDeclarationOrCollectionMemberDeclaration}. + * @param ctx the parse tree + */ + void enterIdentificationVariableDeclarationOrCollectionMemberDeclaration(JpqlParser.IdentificationVariableDeclarationOrCollectionMemberDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#identificationVariableDeclarationOrCollectionMemberDeclaration}. + * @param ctx the parse tree + */ + void exitIdentificationVariableDeclarationOrCollectionMemberDeclaration(JpqlParser.IdentificationVariableDeclarationOrCollectionMemberDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#identification_variable_declaration}. + * @param ctx the parse tree + */ + void enterIdentification_variable_declaration(JpqlParser.Identification_variable_declarationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#identification_variable_declaration}. + * @param ctx the parse tree + */ + void exitIdentification_variable_declaration(JpqlParser.Identification_variable_declarationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#range_variable_declaration}. + * @param ctx the parse tree + */ + void enterRange_variable_declaration(JpqlParser.Range_variable_declarationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#range_variable_declaration}. + * @param ctx the parse tree + */ + void exitRange_variable_declaration(JpqlParser.Range_variable_declarationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#join}. + * @param ctx the parse tree + */ + void enterJoin(JpqlParser.JoinContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#join}. + * @param ctx the parse tree + */ + void exitJoin(JpqlParser.JoinContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#fetch_join}. + * @param ctx the parse tree + */ + void enterFetch_join(JpqlParser.Fetch_joinContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#fetch_join}. + * @param ctx the parse tree + */ + void exitFetch_join(JpqlParser.Fetch_joinContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#join_spec}. + * @param ctx the parse tree + */ + void enterJoin_spec(JpqlParser.Join_specContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#join_spec}. + * @param ctx the parse tree + */ + void exitJoin_spec(JpqlParser.Join_specContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#join_condition}. + * @param ctx the parse tree + */ + void enterJoin_condition(JpqlParser.Join_conditionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#join_condition}. + * @param ctx the parse tree + */ + void exitJoin_condition(JpqlParser.Join_conditionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#join_association_path_expression}. + * @param ctx the parse tree + */ + void enterJoin_association_path_expression(JpqlParser.Join_association_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#join_association_path_expression}. + * @param ctx the parse tree + */ + void exitJoin_association_path_expression(JpqlParser.Join_association_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#join_collection_valued_path_expression}. + * @param ctx the parse tree + */ + void enterJoin_collection_valued_path_expression(JpqlParser.Join_collection_valued_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#join_collection_valued_path_expression}. + * @param ctx the parse tree + */ + void exitJoin_collection_valued_path_expression(JpqlParser.Join_collection_valued_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#join_single_valued_path_expression}. + * @param ctx the parse tree + */ + void enterJoin_single_valued_path_expression(JpqlParser.Join_single_valued_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#join_single_valued_path_expression}. + * @param ctx the parse tree + */ + void exitJoin_single_valued_path_expression(JpqlParser.Join_single_valued_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#collection_member_declaration}. + * @param ctx the parse tree + */ + void enterCollection_member_declaration(JpqlParser.Collection_member_declarationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#collection_member_declaration}. + * @param ctx the parse tree + */ + void exitCollection_member_declaration(JpqlParser.Collection_member_declarationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#qualified_identification_variable}. + * @param ctx the parse tree + */ + void enterQualified_identification_variable(JpqlParser.Qualified_identification_variableContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#qualified_identification_variable}. + * @param ctx the parse tree + */ + void exitQualified_identification_variable(JpqlParser.Qualified_identification_variableContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#map_field_identification_variable}. + * @param ctx the parse tree + */ + void enterMap_field_identification_variable(JpqlParser.Map_field_identification_variableContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#map_field_identification_variable}. + * @param ctx the parse tree + */ + void exitMap_field_identification_variable(JpqlParser.Map_field_identification_variableContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#single_valued_path_expression}. + * @param ctx the parse tree + */ + void enterSingle_valued_path_expression(JpqlParser.Single_valued_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#single_valued_path_expression}. + * @param ctx the parse tree + */ + void exitSingle_valued_path_expression(JpqlParser.Single_valued_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#general_identification_variable}. + * @param ctx the parse tree + */ + void enterGeneral_identification_variable(JpqlParser.General_identification_variableContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#general_identification_variable}. + * @param ctx the parse tree + */ + void exitGeneral_identification_variable(JpqlParser.General_identification_variableContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#general_subpath}. + * @param ctx the parse tree + */ + void enterGeneral_subpath(JpqlParser.General_subpathContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#general_subpath}. + * @param ctx the parse tree + */ + void exitGeneral_subpath(JpqlParser.General_subpathContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_subpath}. + * @param ctx the parse tree + */ + void enterSimple_subpath(JpqlParser.Simple_subpathContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_subpath}. + * @param ctx the parse tree + */ + void exitSimple_subpath(JpqlParser.Simple_subpathContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#treated_subpath}. + * @param ctx the parse tree + */ + void enterTreated_subpath(JpqlParser.Treated_subpathContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#treated_subpath}. + * @param ctx the parse tree + */ + void exitTreated_subpath(JpqlParser.Treated_subpathContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#state_field_path_expression}. + * @param ctx the parse tree + */ + void enterState_field_path_expression(JpqlParser.State_field_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#state_field_path_expression}. + * @param ctx the parse tree + */ + void exitState_field_path_expression(JpqlParser.State_field_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#state_valued_path_expression}. + * @param ctx the parse tree + */ + void enterState_valued_path_expression(JpqlParser.State_valued_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#state_valued_path_expression}. + * @param ctx the parse tree + */ + void exitState_valued_path_expression(JpqlParser.State_valued_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#single_valued_object_path_expression}. + * @param ctx the parse tree + */ + void enterSingle_valued_object_path_expression(JpqlParser.Single_valued_object_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#single_valued_object_path_expression}. + * @param ctx the parse tree + */ + void exitSingle_valued_object_path_expression(JpqlParser.Single_valued_object_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#collection_valued_path_expression}. + * @param ctx the parse tree + */ + void enterCollection_valued_path_expression(JpqlParser.Collection_valued_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#collection_valued_path_expression}. + * @param ctx the parse tree + */ + void exitCollection_valued_path_expression(JpqlParser.Collection_valued_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#update_clause}. + * @param ctx the parse tree + */ + void enterUpdate_clause(JpqlParser.Update_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#update_clause}. + * @param ctx the parse tree + */ + void exitUpdate_clause(JpqlParser.Update_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#update_item}. + * @param ctx the parse tree + */ + void enterUpdate_item(JpqlParser.Update_itemContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#update_item}. + * @param ctx the parse tree + */ + void exitUpdate_item(JpqlParser.Update_itemContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#new_value}. + * @param ctx the parse tree + */ + void enterNew_value(JpqlParser.New_valueContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#new_value}. + * @param ctx the parse tree + */ + void exitNew_value(JpqlParser.New_valueContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#delete_clause}. + * @param ctx the parse tree + */ + void enterDelete_clause(JpqlParser.Delete_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#delete_clause}. + * @param ctx the parse tree + */ + void exitDelete_clause(JpqlParser.Delete_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#select_clause}. + * @param ctx the parse tree + */ + void enterSelect_clause(JpqlParser.Select_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#select_clause}. + * @param ctx the parse tree + */ + void exitSelect_clause(JpqlParser.Select_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#select_item}. + * @param ctx the parse tree + */ + void enterSelect_item(JpqlParser.Select_itemContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#select_item}. + * @param ctx the parse tree + */ + void exitSelect_item(JpqlParser.Select_itemContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#select_expression}. + * @param ctx the parse tree + */ + void enterSelect_expression(JpqlParser.Select_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#select_expression}. + * @param ctx the parse tree + */ + void exitSelect_expression(JpqlParser.Select_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#constructor_expression}. + * @param ctx the parse tree + */ + void enterConstructor_expression(JpqlParser.Constructor_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#constructor_expression}. + * @param ctx the parse tree + */ + void exitConstructor_expression(JpqlParser.Constructor_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#constructor_item}. + * @param ctx the parse tree + */ + void enterConstructor_item(JpqlParser.Constructor_itemContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#constructor_item}. + * @param ctx the parse tree + */ + void exitConstructor_item(JpqlParser.Constructor_itemContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#aggregate_expression}. + * @param ctx the parse tree + */ + void enterAggregate_expression(JpqlParser.Aggregate_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#aggregate_expression}. + * @param ctx the parse tree + */ + void exitAggregate_expression(JpqlParser.Aggregate_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#where_clause}. + * @param ctx the parse tree + */ + void enterWhere_clause(JpqlParser.Where_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#where_clause}. + * @param ctx the parse tree + */ + void exitWhere_clause(JpqlParser.Where_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#groupby_clause}. + * @param ctx the parse tree + */ + void enterGroupby_clause(JpqlParser.Groupby_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#groupby_clause}. + * @param ctx the parse tree + */ + void exitGroupby_clause(JpqlParser.Groupby_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#groupby_item}. + * @param ctx the parse tree + */ + void enterGroupby_item(JpqlParser.Groupby_itemContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#groupby_item}. + * @param ctx the parse tree + */ + void exitGroupby_item(JpqlParser.Groupby_itemContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#having_clause}. + * @param ctx the parse tree + */ + void enterHaving_clause(JpqlParser.Having_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#having_clause}. + * @param ctx the parse tree + */ + void exitHaving_clause(JpqlParser.Having_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#orderby_clause}. + * @param ctx the parse tree + */ + void enterOrderby_clause(JpqlParser.Orderby_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#orderby_clause}. + * @param ctx the parse tree + */ + void exitOrderby_clause(JpqlParser.Orderby_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#orderby_item}. + * @param ctx the parse tree + */ + void enterOrderby_item(JpqlParser.Orderby_itemContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#orderby_item}. + * @param ctx the parse tree + */ + void exitOrderby_item(JpqlParser.Orderby_itemContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#subquery}. + * @param ctx the parse tree + */ + void enterSubquery(JpqlParser.SubqueryContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#subquery}. + * @param ctx the parse tree + */ + void exitSubquery(JpqlParser.SubqueryContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#subquery_from_clause}. + * @param ctx the parse tree + */ + void enterSubquery_from_clause(JpqlParser.Subquery_from_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#subquery_from_clause}. + * @param ctx the parse tree + */ + void exitSubquery_from_clause(JpqlParser.Subquery_from_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#subselect_identification_variable_declaration}. + * @param ctx the parse tree + */ + void enterSubselect_identification_variable_declaration(JpqlParser.Subselect_identification_variable_declarationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#subselect_identification_variable_declaration}. + * @param ctx the parse tree + */ + void exitSubselect_identification_variable_declaration(JpqlParser.Subselect_identification_variable_declarationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#derived_path_expression}. + * @param ctx the parse tree + */ + void enterDerived_path_expression(JpqlParser.Derived_path_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#derived_path_expression}. + * @param ctx the parse tree + */ + void exitDerived_path_expression(JpqlParser.Derived_path_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#general_derived_path}. + * @param ctx the parse tree + */ + void enterGeneral_derived_path(JpqlParser.General_derived_pathContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#general_derived_path}. + * @param ctx the parse tree + */ + void exitGeneral_derived_path(JpqlParser.General_derived_pathContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_derived_path}. + * @param ctx the parse tree + */ + void enterSimple_derived_path(JpqlParser.Simple_derived_pathContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_derived_path}. + * @param ctx the parse tree + */ + void exitSimple_derived_path(JpqlParser.Simple_derived_pathContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#treated_derived_path}. + * @param ctx the parse tree + */ + void enterTreated_derived_path(JpqlParser.Treated_derived_pathContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#treated_derived_path}. + * @param ctx the parse tree + */ + void exitTreated_derived_path(JpqlParser.Treated_derived_pathContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#derived_collection_member_declaration}. + * @param ctx the parse tree + */ + void enterDerived_collection_member_declaration(JpqlParser.Derived_collection_member_declarationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#derived_collection_member_declaration}. + * @param ctx the parse tree + */ + void exitDerived_collection_member_declaration(JpqlParser.Derived_collection_member_declarationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_select_clause}. + * @param ctx the parse tree + */ + void enterSimple_select_clause(JpqlParser.Simple_select_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_select_clause}. + * @param ctx the parse tree + */ + void exitSimple_select_clause(JpqlParser.Simple_select_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_select_expression}. + * @param ctx the parse tree + */ + void enterSimple_select_expression(JpqlParser.Simple_select_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_select_expression}. + * @param ctx the parse tree + */ + void exitSimple_select_expression(JpqlParser.Simple_select_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#scalar_expression}. + * @param ctx the parse tree + */ + void enterScalar_expression(JpqlParser.Scalar_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#scalar_expression}. + * @param ctx the parse tree + */ + void exitScalar_expression(JpqlParser.Scalar_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#conditional_expression}. + * @param ctx the parse tree + */ + void enterConditional_expression(JpqlParser.Conditional_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#conditional_expression}. + * @param ctx the parse tree + */ + void exitConditional_expression(JpqlParser.Conditional_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#conditional_term}. + * @param ctx the parse tree + */ + void enterConditional_term(JpqlParser.Conditional_termContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#conditional_term}. + * @param ctx the parse tree + */ + void exitConditional_term(JpqlParser.Conditional_termContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#conditional_factor}. + * @param ctx the parse tree + */ + void enterConditional_factor(JpqlParser.Conditional_factorContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#conditional_factor}. + * @param ctx the parse tree + */ + void exitConditional_factor(JpqlParser.Conditional_factorContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#conditional_primary}. + * @param ctx the parse tree + */ + void enterConditional_primary(JpqlParser.Conditional_primaryContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#conditional_primary}. + * @param ctx the parse tree + */ + void exitConditional_primary(JpqlParser.Conditional_primaryContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_cond_expression}. + * @param ctx the parse tree + */ + void enterSimple_cond_expression(JpqlParser.Simple_cond_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_cond_expression}. + * @param ctx the parse tree + */ + void exitSimple_cond_expression(JpqlParser.Simple_cond_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#between_expression}. + * @param ctx the parse tree + */ + void enterBetween_expression(JpqlParser.Between_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#between_expression}. + * @param ctx the parse tree + */ + void exitBetween_expression(JpqlParser.Between_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#in_expression}. + * @param ctx the parse tree + */ + void enterIn_expression(JpqlParser.In_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#in_expression}. + * @param ctx the parse tree + */ + void exitIn_expression(JpqlParser.In_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#in_item}. + * @param ctx the parse tree + */ + void enterIn_item(JpqlParser.In_itemContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#in_item}. + * @param ctx the parse tree + */ + void exitIn_item(JpqlParser.In_itemContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#like_expression}. + * @param ctx the parse tree + */ + void enterLike_expression(JpqlParser.Like_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#like_expression}. + * @param ctx the parse tree + */ + void exitLike_expression(JpqlParser.Like_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#null_comparison_expression}. + * @param ctx the parse tree + */ + void enterNull_comparison_expression(JpqlParser.Null_comparison_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#null_comparison_expression}. + * @param ctx the parse tree + */ + void exitNull_comparison_expression(JpqlParser.Null_comparison_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#empty_collection_comparison_expression}. + * @param ctx the parse tree + */ + void enterEmpty_collection_comparison_expression(JpqlParser.Empty_collection_comparison_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#empty_collection_comparison_expression}. + * @param ctx the parse tree + */ + void exitEmpty_collection_comparison_expression(JpqlParser.Empty_collection_comparison_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#collection_member_expression}. + * @param ctx the parse tree + */ + void enterCollection_member_expression(JpqlParser.Collection_member_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#collection_member_expression}. + * @param ctx the parse tree + */ + void exitCollection_member_expression(JpqlParser.Collection_member_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#entity_or_value_expression}. + * @param ctx the parse tree + */ + void enterEntity_or_value_expression(JpqlParser.Entity_or_value_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#entity_or_value_expression}. + * @param ctx the parse tree + */ + void exitEntity_or_value_expression(JpqlParser.Entity_or_value_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_entity_or_value_expression}. + * @param ctx the parse tree + */ + void enterSimple_entity_or_value_expression(JpqlParser.Simple_entity_or_value_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_entity_or_value_expression}. + * @param ctx the parse tree + */ + void exitSimple_entity_or_value_expression(JpqlParser.Simple_entity_or_value_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#exists_expression}. + * @param ctx the parse tree + */ + void enterExists_expression(JpqlParser.Exists_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#exists_expression}. + * @param ctx the parse tree + */ + void exitExists_expression(JpqlParser.Exists_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#all_or_any_expression}. + * @param ctx the parse tree + */ + void enterAll_or_any_expression(JpqlParser.All_or_any_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#all_or_any_expression}. + * @param ctx the parse tree + */ + void exitAll_or_any_expression(JpqlParser.All_or_any_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#comparison_expression}. + * @param ctx the parse tree + */ + void enterComparison_expression(JpqlParser.Comparison_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#comparison_expression}. + * @param ctx the parse tree + */ + void exitComparison_expression(JpqlParser.Comparison_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#comparison_operator}. + * @param ctx the parse tree + */ + void enterComparison_operator(JpqlParser.Comparison_operatorContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#comparison_operator}. + * @param ctx the parse tree + */ + void exitComparison_operator(JpqlParser.Comparison_operatorContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#arithmetic_expression}. + * @param ctx the parse tree + */ + void enterArithmetic_expression(JpqlParser.Arithmetic_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#arithmetic_expression}. + * @param ctx the parse tree + */ + void exitArithmetic_expression(JpqlParser.Arithmetic_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#arithmetic_term}. + * @param ctx the parse tree + */ + void enterArithmetic_term(JpqlParser.Arithmetic_termContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#arithmetic_term}. + * @param ctx the parse tree + */ + void exitArithmetic_term(JpqlParser.Arithmetic_termContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#arithmetic_factor}. + * @param ctx the parse tree + */ + void enterArithmetic_factor(JpqlParser.Arithmetic_factorContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#arithmetic_factor}. + * @param ctx the parse tree + */ + void exitArithmetic_factor(JpqlParser.Arithmetic_factorContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#arithmetic_primary}. + * @param ctx the parse tree + */ + void enterArithmetic_primary(JpqlParser.Arithmetic_primaryContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#arithmetic_primary}. + * @param ctx the parse tree + */ + void exitArithmetic_primary(JpqlParser.Arithmetic_primaryContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#string_expression}. + * @param ctx the parse tree + */ + void enterString_expression(JpqlParser.String_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#string_expression}. + * @param ctx the parse tree + */ + void exitString_expression(JpqlParser.String_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#datetime_expression}. + * @param ctx the parse tree + */ + void enterDatetime_expression(JpqlParser.Datetime_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#datetime_expression}. + * @param ctx the parse tree + */ + void exitDatetime_expression(JpqlParser.Datetime_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#boolean_expression}. + * @param ctx the parse tree + */ + void enterBoolean_expression(JpqlParser.Boolean_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#boolean_expression}. + * @param ctx the parse tree + */ + void exitBoolean_expression(JpqlParser.Boolean_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#enum_expression}. + * @param ctx the parse tree + */ + void enterEnum_expression(JpqlParser.Enum_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#enum_expression}. + * @param ctx the parse tree + */ + void exitEnum_expression(JpqlParser.Enum_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#entity_expression}. + * @param ctx the parse tree + */ + void enterEntity_expression(JpqlParser.Entity_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#entity_expression}. + * @param ctx the parse tree + */ + void exitEntity_expression(JpqlParser.Entity_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_entity_expression}. + * @param ctx the parse tree + */ + void enterSimple_entity_expression(JpqlParser.Simple_entity_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_entity_expression}. + * @param ctx the parse tree + */ + void exitSimple_entity_expression(JpqlParser.Simple_entity_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#entity_type_expression}. + * @param ctx the parse tree + */ + void enterEntity_type_expression(JpqlParser.Entity_type_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#entity_type_expression}. + * @param ctx the parse tree + */ + void exitEntity_type_expression(JpqlParser.Entity_type_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#type_discriminator}. + * @param ctx the parse tree + */ + void enterType_discriminator(JpqlParser.Type_discriminatorContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#type_discriminator}. + * @param ctx the parse tree + */ + void exitType_discriminator(JpqlParser.Type_discriminatorContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#functions_returning_numerics}. + * @param ctx the parse tree + */ + void enterFunctions_returning_numerics(JpqlParser.Functions_returning_numericsContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#functions_returning_numerics}. + * @param ctx the parse tree + */ + void exitFunctions_returning_numerics(JpqlParser.Functions_returning_numericsContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#functions_returning_datetime}. + * @param ctx the parse tree + */ + void enterFunctions_returning_datetime(JpqlParser.Functions_returning_datetimeContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#functions_returning_datetime}. + * @param ctx the parse tree + */ + void exitFunctions_returning_datetime(JpqlParser.Functions_returning_datetimeContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#functions_returning_strings}. + * @param ctx the parse tree + */ + void enterFunctions_returning_strings(JpqlParser.Functions_returning_stringsContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#functions_returning_strings}. + * @param ctx the parse tree + */ + void exitFunctions_returning_strings(JpqlParser.Functions_returning_stringsContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#trim_specification}. + * @param ctx the parse tree + */ + void enterTrim_specification(JpqlParser.Trim_specificationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#trim_specification}. + * @param ctx the parse tree + */ + void exitTrim_specification(JpqlParser.Trim_specificationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#function_invocation}. + * @param ctx the parse tree + */ + void enterFunction_invocation(JpqlParser.Function_invocationContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#function_invocation}. + * @param ctx the parse tree + */ + void exitFunction_invocation(JpqlParser.Function_invocationContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#extract_datetime_field}. + * @param ctx the parse tree + */ + void enterExtract_datetime_field(JpqlParser.Extract_datetime_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#extract_datetime_field}. + * @param ctx the parse tree + */ + void exitExtract_datetime_field(JpqlParser.Extract_datetime_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#datetime_field}. + * @param ctx the parse tree + */ + void enterDatetime_field(JpqlParser.Datetime_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#datetime_field}. + * @param ctx the parse tree + */ + void exitDatetime_field(JpqlParser.Datetime_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#extract_datetime_part}. + * @param ctx the parse tree + */ + void enterExtract_datetime_part(JpqlParser.Extract_datetime_partContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#extract_datetime_part}. + * @param ctx the parse tree + */ + void exitExtract_datetime_part(JpqlParser.Extract_datetime_partContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#datetime_part}. + * @param ctx the parse tree + */ + void enterDatetime_part(JpqlParser.Datetime_partContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#datetime_part}. + * @param ctx the parse tree + */ + void exitDatetime_part(JpqlParser.Datetime_partContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#function_arg}. + * @param ctx the parse tree + */ + void enterFunction_arg(JpqlParser.Function_argContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#function_arg}. + * @param ctx the parse tree + */ + void exitFunction_arg(JpqlParser.Function_argContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#case_expression}. + * @param ctx the parse tree + */ + void enterCase_expression(JpqlParser.Case_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#case_expression}. + * @param ctx the parse tree + */ + void exitCase_expression(JpqlParser.Case_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#general_case_expression}. + * @param ctx the parse tree + */ + void enterGeneral_case_expression(JpqlParser.General_case_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#general_case_expression}. + * @param ctx the parse tree + */ + void exitGeneral_case_expression(JpqlParser.General_case_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#when_clause}. + * @param ctx the parse tree + */ + void enterWhen_clause(JpqlParser.When_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#when_clause}. + * @param ctx the parse tree + */ + void exitWhen_clause(JpqlParser.When_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_case_expression}. + * @param ctx the parse tree + */ + void enterSimple_case_expression(JpqlParser.Simple_case_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_case_expression}. + * @param ctx the parse tree + */ + void exitSimple_case_expression(JpqlParser.Simple_case_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#case_operand}. + * @param ctx the parse tree + */ + void enterCase_operand(JpqlParser.Case_operandContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#case_operand}. + * @param ctx the parse tree + */ + void exitCase_operand(JpqlParser.Case_operandContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#simple_when_clause}. + * @param ctx the parse tree + */ + void enterSimple_when_clause(JpqlParser.Simple_when_clauseContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#simple_when_clause}. + * @param ctx the parse tree + */ + void exitSimple_when_clause(JpqlParser.Simple_when_clauseContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#coalesce_expression}. + * @param ctx the parse tree + */ + void enterCoalesce_expression(JpqlParser.Coalesce_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#coalesce_expression}. + * @param ctx the parse tree + */ + void exitCoalesce_expression(JpqlParser.Coalesce_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#nullif_expression}. + * @param ctx the parse tree + */ + void enterNullif_expression(JpqlParser.Nullif_expressionContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#nullif_expression}. + * @param ctx the parse tree + */ + void exitNullif_expression(JpqlParser.Nullif_expressionContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#trim_character}. + * @param ctx the parse tree + */ + void enterTrim_character(JpqlParser.Trim_characterContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#trim_character}. + * @param ctx the parse tree + */ + void exitTrim_character(JpqlParser.Trim_characterContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#identification_variable}. + * @param ctx the parse tree + */ + void enterIdentification_variable(JpqlParser.Identification_variableContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#identification_variable}. + * @param ctx the parse tree + */ + void exitIdentification_variable(JpqlParser.Identification_variableContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#constructor_name}. + * @param ctx the parse tree + */ + void enterConstructor_name(JpqlParser.Constructor_nameContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#constructor_name}. + * @param ctx the parse tree + */ + void exitConstructor_name(JpqlParser.Constructor_nameContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#literal}. + * @param ctx the parse tree + */ + void enterLiteral(JpqlParser.LiteralContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#literal}. + * @param ctx the parse tree + */ + void exitLiteral(JpqlParser.LiteralContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#input_parameter}. + * @param ctx the parse tree + */ + void enterInput_parameter(JpqlParser.Input_parameterContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#input_parameter}. + * @param ctx the parse tree + */ + void exitInput_parameter(JpqlParser.Input_parameterContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#pattern_value}. + * @param ctx the parse tree + */ + void enterPattern_value(JpqlParser.Pattern_valueContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#pattern_value}. + * @param ctx the parse tree + */ + void exitPattern_value(JpqlParser.Pattern_valueContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#date_time_timestamp_literal}. + * @param ctx the parse tree + */ + void enterDate_time_timestamp_literal(JpqlParser.Date_time_timestamp_literalContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#date_time_timestamp_literal}. + * @param ctx the parse tree + */ + void exitDate_time_timestamp_literal(JpqlParser.Date_time_timestamp_literalContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#entity_type_literal}. + * @param ctx the parse tree + */ + void enterEntity_type_literal(JpqlParser.Entity_type_literalContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#entity_type_literal}. + * @param ctx the parse tree + */ + void exitEntity_type_literal(JpqlParser.Entity_type_literalContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#escape_character}. + * @param ctx the parse tree + */ + void enterEscape_character(JpqlParser.Escape_characterContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#escape_character}. + * @param ctx the parse tree + */ + void exitEscape_character(JpqlParser.Escape_characterContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#numeric_literal}. + * @param ctx the parse tree + */ + void enterNumeric_literal(JpqlParser.Numeric_literalContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#numeric_literal}. + * @param ctx the parse tree + */ + void exitNumeric_literal(JpqlParser.Numeric_literalContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#boolean_literal}. + * @param ctx the parse tree + */ + void enterBoolean_literal(JpqlParser.Boolean_literalContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#boolean_literal}. + * @param ctx the parse tree + */ + void exitBoolean_literal(JpqlParser.Boolean_literalContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#enum_literal}. + * @param ctx the parse tree + */ + void enterEnum_literal(JpqlParser.Enum_literalContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#enum_literal}. + * @param ctx the parse tree + */ + void exitEnum_literal(JpqlParser.Enum_literalContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#string_literal}. + * @param ctx the parse tree + */ + void enterString_literal(JpqlParser.String_literalContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#string_literal}. + * @param ctx the parse tree + */ + void exitString_literal(JpqlParser.String_literalContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#single_valued_embeddable_object_field}. + * @param ctx the parse tree + */ + void enterSingle_valued_embeddable_object_field(JpqlParser.Single_valued_embeddable_object_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#single_valued_embeddable_object_field}. + * @param ctx the parse tree + */ + void exitSingle_valued_embeddable_object_field(JpqlParser.Single_valued_embeddable_object_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#subtype}. + * @param ctx the parse tree + */ + void enterSubtype(JpqlParser.SubtypeContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#subtype}. + * @param ctx the parse tree + */ + void exitSubtype(JpqlParser.SubtypeContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#collection_valued_field}. + * @param ctx the parse tree + */ + void enterCollection_valued_field(JpqlParser.Collection_valued_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#collection_valued_field}. + * @param ctx the parse tree + */ + void exitCollection_valued_field(JpqlParser.Collection_valued_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#single_valued_object_field}. + * @param ctx the parse tree + */ + void enterSingle_valued_object_field(JpqlParser.Single_valued_object_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#single_valued_object_field}. + * @param ctx the parse tree + */ + void exitSingle_valued_object_field(JpqlParser.Single_valued_object_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#state_field}. + * @param ctx the parse tree + */ + void enterState_field(JpqlParser.State_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#state_field}. + * @param ctx the parse tree + */ + void exitState_field(JpqlParser.State_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#collection_value_field}. + * @param ctx the parse tree + */ + void enterCollection_value_field(JpqlParser.Collection_value_fieldContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#collection_value_field}. + * @param ctx the parse tree + */ + void exitCollection_value_field(JpqlParser.Collection_value_fieldContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#entity_name}. + * @param ctx the parse tree + */ + void enterEntity_name(JpqlParser.Entity_nameContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#entity_name}. + * @param ctx the parse tree + */ + void exitEntity_name(JpqlParser.Entity_nameContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#result_variable}. + * @param ctx the parse tree + */ + void enterResult_variable(JpqlParser.Result_variableContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#result_variable}. + * @param ctx the parse tree + */ + void exitResult_variable(JpqlParser.Result_variableContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#superquery_identification_variable}. + * @param ctx the parse tree + */ + void enterSuperquery_identification_variable(JpqlParser.Superquery_identification_variableContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#superquery_identification_variable}. + * @param ctx the parse tree + */ + void exitSuperquery_identification_variable(JpqlParser.Superquery_identification_variableContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#collection_valued_input_parameter}. + * @param ctx the parse tree + */ + void enterCollection_valued_input_parameter(JpqlParser.Collection_valued_input_parameterContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#collection_valued_input_parameter}. + * @param ctx the parse tree + */ + void exitCollection_valued_input_parameter(JpqlParser.Collection_valued_input_parameterContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#single_valued_input_parameter}. + * @param ctx the parse tree + */ + void enterSingle_valued_input_parameter(JpqlParser.Single_valued_input_parameterContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#single_valued_input_parameter}. + * @param ctx the parse tree + */ + void exitSingle_valued_input_parameter(JpqlParser.Single_valued_input_parameterContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#function_name}. + * @param ctx the parse tree + */ + void enterFunction_name(JpqlParser.Function_nameContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#function_name}. + * @param ctx the parse tree + */ + void exitFunction_name(JpqlParser.Function_nameContext ctx); + /** + * Enter a parse tree produced by {@link JpqlParser#character_valued_input_parameter}. + * @param ctx the parse tree + */ + void enterCharacter_valued_input_parameter(JpqlParser.Character_valued_input_parameterContext ctx); + /** + * Exit a parse tree produced by {@link JpqlParser#character_valued_input_parameter}. + * @param ctx the parse tree + */ + void exitCharacter_valued_input_parameter(JpqlParser.Character_valued_input_parameterContext ctx); +} \ No newline at end of file diff --git a/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlParser.java b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlParser.java new file mode 100644 index 000000000..7da8c0281 --- /dev/null +++ b/headless-services/commons/jpql/src/main/java/org/springframework/ide/vscode/jpql/antlr/parser/JpqlParser.java @@ -0,0 +1,10848 @@ +// Generated from Jpql.g4 by ANTLR 4.13.1 +package org.springframework.ide.vscode.jpql.antlr.parser; + +/** + * JPQL per https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#bnf + * + * This is JPA BNF for JPQL. There are gaps and inconsistencies in the BNF itself, explained by other fragments of the spec. + * + * @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf + * @author Greg Turnquist + * @author Christoph Strobl + * @since 3.1 + */ + +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", "CheckReturnValue"}) +public class JpqlParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, + T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, WS=16, ABS=17, + ALL=18, AND=19, ANY=20, AS=21, ASC=22, AVG=23, BETWEEN=24, BOTH=25, BY=26, + CASE=27, CEILING=28, COALESCE=29, CONCAT=30, COUNT=31, CURRENT_DATE=32, + CURRENT_TIME=33, CURRENT_TIMESTAMP=34, DATE=35, DATETIME=36, DELETE=37, + DESC=38, DISTINCT=39, END=40, ELSE=41, EMPTY=42, ENTRY=43, ESCAPE=44, + EXISTS=45, EXP=46, EXTRACT=47, FALSE=48, FETCH=49, FLOOR=50, FROM=51, + FUNCTION=52, GROUP=53, HAVING=54, IN=55, INDEX=56, INNER=57, IS=58, JOIN=59, + KEY=60, LEADING=61, LEFT=62, LENGTH=63, LIKE=64, LN=65, LOCAL=66, LOCATE=67, + LOWER=68, MAX=69, MEMBER=70, MIN=71, MOD=72, NEW=73, NOT=74, NULL=75, + NULLIF=76, OBJECT=77, OF=78, ON=79, OR=80, ORDER=81, OUTER=82, POWER=83, + ROUND=84, SELECT=85, SET=86, SIGN=87, SIZE=88, SOME=89, SQRT=90, SUBSTRING=91, + SUM=92, THEN=93, TIME=94, TRAILING=95, TREAT=96, TRIM=97, TRUE=98, TYPE=99, + UPDATE=100, UPPER=101, VALUE=102, WHEN=103, WHERE=104, EQUAL=105, NOT_EQUAL=106, + CHARACTER=107, IDENTIFICATION_VARIABLE=108, STRINGLITERAL=109, JAVASTRINGLITERAL=110, + FLOATLITERAL=111, INTLITERAL=112, LONGLITERAL=113, SPEL=114; + public static final int + RULE_start = 0, RULE_ql_statement = 1, RULE_select_statement = 2, RULE_update_statement = 3, + RULE_delete_statement = 4, RULE_from_clause = 5, RULE_identificationVariableDeclarationOrCollectionMemberDeclaration = 6, + RULE_identification_variable_declaration = 7, RULE_range_variable_declaration = 8, + RULE_join = 9, RULE_fetch_join = 10, RULE_join_spec = 11, RULE_join_condition = 12, + RULE_join_association_path_expression = 13, RULE_join_collection_valued_path_expression = 14, + RULE_join_single_valued_path_expression = 15, RULE_collection_member_declaration = 16, + RULE_qualified_identification_variable = 17, RULE_map_field_identification_variable = 18, + RULE_single_valued_path_expression = 19, RULE_general_identification_variable = 20, + RULE_general_subpath = 21, RULE_simple_subpath = 22, RULE_treated_subpath = 23, + RULE_state_field_path_expression = 24, RULE_state_valued_path_expression = 25, + RULE_single_valued_object_path_expression = 26, RULE_collection_valued_path_expression = 27, + RULE_update_clause = 28, RULE_update_item = 29, RULE_new_value = 30, RULE_delete_clause = 31, + RULE_select_clause = 32, RULE_select_item = 33, RULE_select_expression = 34, + RULE_constructor_expression = 35, RULE_constructor_item = 36, RULE_aggregate_expression = 37, + RULE_where_clause = 38, RULE_groupby_clause = 39, RULE_groupby_item = 40, + RULE_having_clause = 41, RULE_orderby_clause = 42, RULE_orderby_item = 43, + RULE_subquery = 44, RULE_subquery_from_clause = 45, RULE_subselect_identification_variable_declaration = 46, + RULE_derived_path_expression = 47, RULE_general_derived_path = 48, RULE_simple_derived_path = 49, + RULE_treated_derived_path = 50, RULE_derived_collection_member_declaration = 51, + RULE_simple_select_clause = 52, RULE_simple_select_expression = 53, RULE_scalar_expression = 54, + RULE_conditional_expression = 55, RULE_conditional_term = 56, RULE_conditional_factor = 57, + RULE_conditional_primary = 58, RULE_simple_cond_expression = 59, RULE_between_expression = 60, + RULE_in_expression = 61, RULE_in_item = 62, RULE_like_expression = 63, + RULE_null_comparison_expression = 64, RULE_empty_collection_comparison_expression = 65, + RULE_collection_member_expression = 66, RULE_entity_or_value_expression = 67, + RULE_simple_entity_or_value_expression = 68, RULE_exists_expression = 69, + RULE_all_or_any_expression = 70, RULE_comparison_expression = 71, RULE_comparison_operator = 72, + RULE_arithmetic_expression = 73, RULE_arithmetic_term = 74, RULE_arithmetic_factor = 75, + RULE_arithmetic_primary = 76, RULE_string_expression = 77, RULE_datetime_expression = 78, + RULE_boolean_expression = 79, RULE_enum_expression = 80, RULE_entity_expression = 81, + RULE_simple_entity_expression = 82, RULE_entity_type_expression = 83, + RULE_type_discriminator = 84, RULE_functions_returning_numerics = 85, + RULE_functions_returning_datetime = 86, RULE_functions_returning_strings = 87, + RULE_trim_specification = 88, RULE_function_invocation = 89, RULE_extract_datetime_field = 90, + RULE_datetime_field = 91, RULE_extract_datetime_part = 92, RULE_datetime_part = 93, + RULE_function_arg = 94, RULE_case_expression = 95, RULE_general_case_expression = 96, + RULE_when_clause = 97, RULE_simple_case_expression = 98, RULE_case_operand = 99, + RULE_simple_when_clause = 100, RULE_coalesce_expression = 101, RULE_nullif_expression = 102, + RULE_trim_character = 103, RULE_identification_variable = 104, RULE_constructor_name = 105, + RULE_literal = 106, RULE_input_parameter = 107, RULE_pattern_value = 108, + RULE_date_time_timestamp_literal = 109, RULE_entity_type_literal = 110, + RULE_escape_character = 111, RULE_numeric_literal = 112, RULE_boolean_literal = 113, + RULE_enum_literal = 114, RULE_string_literal = 115, RULE_single_valued_embeddable_object_field = 116, + RULE_subtype = 117, RULE_collection_valued_field = 118, RULE_single_valued_object_field = 119, + RULE_state_field = 120, RULE_collection_value_field = 121, RULE_entity_name = 122, + RULE_result_variable = 123, RULE_superquery_identification_variable = 124, + RULE_collection_valued_input_parameter = 125, RULE_single_valued_input_parameter = 126, + RULE_function_name = 127, RULE_character_valued_input_parameter = 128; + private static String[] makeRuleNames() { + return new String[] { + "start", "ql_statement", "select_statement", "update_statement", "delete_statement", + "from_clause", "identificationVariableDeclarationOrCollectionMemberDeclaration", + "identification_variable_declaration", "range_variable_declaration", + "join", "fetch_join", "join_spec", "join_condition", "join_association_path_expression", + "join_collection_valued_path_expression", "join_single_valued_path_expression", + "collection_member_declaration", "qualified_identification_variable", + "map_field_identification_variable", "single_valued_path_expression", + "general_identification_variable", "general_subpath", "simple_subpath", + "treated_subpath", "state_field_path_expression", "state_valued_path_expression", + "single_valued_object_path_expression", "collection_valued_path_expression", + "update_clause", "update_item", "new_value", "delete_clause", "select_clause", + "select_item", "select_expression", "constructor_expression", "constructor_item", + "aggregate_expression", "where_clause", "groupby_clause", "groupby_item", + "having_clause", "orderby_clause", "orderby_item", "subquery", "subquery_from_clause", + "subselect_identification_variable_declaration", "derived_path_expression", + "general_derived_path", "simple_derived_path", "treated_derived_path", + "derived_collection_member_declaration", "simple_select_clause", "simple_select_expression", + "scalar_expression", "conditional_expression", "conditional_term", "conditional_factor", + "conditional_primary", "simple_cond_expression", "between_expression", + "in_expression", "in_item", "like_expression", "null_comparison_expression", + "empty_collection_comparison_expression", "collection_member_expression", + "entity_or_value_expression", "simple_entity_or_value_expression", "exists_expression", + "all_or_any_expression", "comparison_expression", "comparison_operator", + "arithmetic_expression", "arithmetic_term", "arithmetic_factor", "arithmetic_primary", + "string_expression", "datetime_expression", "boolean_expression", "enum_expression", + "entity_expression", "simple_entity_expression", "entity_type_expression", + "type_discriminator", "functions_returning_numerics", "functions_returning_datetime", + "functions_returning_strings", "trim_specification", "function_invocation", + "extract_datetime_field", "datetime_field", "extract_datetime_part", + "datetime_part", "function_arg", "case_expression", "general_case_expression", + "when_clause", "simple_case_expression", "case_operand", "simple_when_clause", + "coalesce_expression", "nullif_expression", "trim_character", "identification_variable", + "constructor_name", "literal", "input_parameter", "pattern_value", "date_time_timestamp_literal", + "entity_type_literal", "escape_character", "numeric_literal", "boolean_literal", + "enum_literal", "string_literal", "single_valued_embeddable_object_field", + "subtype", "collection_valued_field", "single_valued_object_field", "state_field", + "collection_value_field", "entity_name", "result_variable", "superquery_identification_variable", + "collection_valued_input_parameter", "single_valued_input_parameter", + "function_name", "character_valued_input_parameter" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "','", "'('", "')'", "'.'", "'>'", "'>='", "'<'", "'<='", "'+'", + "'-'", "'*'", "'/'", "':'", "'?'", "'%'", null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, 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, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, "WS", "ABS", "ALL", "AND", "ANY", "AS", "ASC", + "AVG", "BETWEEN", "BOTH", "BY", "CASE", "CEILING", "COALESCE", "CONCAT", + "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATE", + "DATETIME", "DELETE", "DESC", "DISTINCT", "END", "ELSE", "EMPTY", "ENTRY", + "ESCAPE", "EXISTS", "EXP", "EXTRACT", "FALSE", "FETCH", "FLOOR", "FROM", + "FUNCTION", "GROUP", "HAVING", "IN", "INDEX", "INNER", "IS", "JOIN", + "KEY", "LEADING", "LEFT", "LENGTH", "LIKE", "LN", "LOCAL", "LOCATE", + "LOWER", "MAX", "MEMBER", "MIN", "MOD", "NEW", "NOT", "NULL", "NULLIF", + "OBJECT", "OF", "ON", "OR", "ORDER", "OUTER", "POWER", "ROUND", "SELECT", + "SET", "SIGN", "SIZE", "SOME", "SQRT", "SUBSTRING", "SUM", "THEN", "TIME", + "TRAILING", "TREAT", "TRIM", "TRUE", "TYPE", "UPDATE", "UPPER", "VALUE", + "WHEN", "WHERE", "EQUAL", "NOT_EQUAL", "CHARACTER", "IDENTIFICATION_VARIABLE", + "STRINGLITERAL", "JAVASTRINGLITERAL", "FLOATLITERAL", "INTLITERAL", "LONGLITERAL", + "SPEL" + }; + } + 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 "Jpql.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public JpqlParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class StartContext extends ParserRuleContext { + public Ql_statementContext ql_statement() { + return getRuleContext(Ql_statementContext.class,0); + } + public TerminalNode EOF() { return getToken(JpqlParser.EOF, 0); } + public StartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_start; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterStart(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitStart(this); + } + } + + public final StartContext start() throws RecognitionException { + StartContext _localctx = new StartContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_start); + try { + enterOuterAlt(_localctx, 1); + { + setState(258); + ql_statement(); + setState(259); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Ql_statementContext extends ParserRuleContext { + public Select_statementContext select_statement() { + return getRuleContext(Select_statementContext.class,0); + } + public Update_statementContext update_statement() { + return getRuleContext(Update_statementContext.class,0); + } + public Delete_statementContext delete_statement() { + return getRuleContext(Delete_statementContext.class,0); + } + public Ql_statementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ql_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterQl_statement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitQl_statement(this); + } + } + + public final Ql_statementContext ql_statement() throws RecognitionException { + Ql_statementContext _localctx = new Ql_statementContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_ql_statement); + try { + setState(264); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + enterOuterAlt(_localctx, 1); + { + setState(261); + select_statement(); + } + break; + case UPDATE: + enterOuterAlt(_localctx, 2); + { + setState(262); + update_statement(); + } + break; + case DELETE: + enterOuterAlt(_localctx, 3); + { + setState(263); + delete_statement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Select_statementContext extends ParserRuleContext { + public Select_clauseContext select_clause() { + return getRuleContext(Select_clauseContext.class,0); + } + public From_clauseContext from_clause() { + return getRuleContext(From_clauseContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public Groupby_clauseContext groupby_clause() { + return getRuleContext(Groupby_clauseContext.class,0); + } + public Having_clauseContext having_clause() { + return getRuleContext(Having_clauseContext.class,0); + } + public Orderby_clauseContext orderby_clause() { + return getRuleContext(Orderby_clauseContext.class,0); + } + public Select_statementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSelect_statement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSelect_statement(this); + } + } + + public final Select_statementContext select_statement() throws RecognitionException { + Select_statementContext _localctx = new Select_statementContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_select_statement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(266); + select_clause(); + setState(267); + from_clause(); + setState(269); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(268); + where_clause(); + } + } + + setState(272); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GROUP) { + { + setState(271); + groupby_clause(); + } + } + + setState(275); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==HAVING) { + { + setState(274); + having_clause(); + } + } + + setState(278); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(277); + orderby_clause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Update_statementContext extends ParserRuleContext { + public Update_clauseContext update_clause() { + return getRuleContext(Update_clauseContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public Update_statementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_update_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterUpdate_statement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitUpdate_statement(this); + } + } + + public final Update_statementContext update_statement() throws RecognitionException { + Update_statementContext _localctx = new Update_statementContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_update_statement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(280); + update_clause(); + setState(282); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(281); + where_clause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Delete_statementContext extends ParserRuleContext { + public Delete_clauseContext delete_clause() { + return getRuleContext(Delete_clauseContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public Delete_statementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_delete_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDelete_statement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDelete_statement(this); + } + } + + public final Delete_statementContext delete_statement() throws RecognitionException { + Delete_statementContext _localctx = new Delete_statementContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_delete_statement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(284); + delete_clause(); + setState(286); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(285); + where_clause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class From_clauseContext extends ParserRuleContext { + public TerminalNode FROM() { return getToken(JpqlParser.FROM, 0); } + public Identification_variable_declarationContext identification_variable_declaration() { + return getRuleContext(Identification_variable_declarationContext.class,0); + } + public List identificationVariableDeclarationOrCollectionMemberDeclaration() { + return getRuleContexts(IdentificationVariableDeclarationOrCollectionMemberDeclarationContext.class); + } + public IdentificationVariableDeclarationOrCollectionMemberDeclarationContext identificationVariableDeclarationOrCollectionMemberDeclaration(int i) { + return getRuleContext(IdentificationVariableDeclarationOrCollectionMemberDeclarationContext.class,i); + } + public From_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFrom_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFrom_clause(this); + } + } + + public final From_clauseContext from_clause() throws RecognitionException { + From_clauseContext _localctx = new From_clauseContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_from_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(288); + match(FROM); + setState(289); + identification_variable_declaration(); + setState(294); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(290); + match(T__0); + setState(291); + identificationVariableDeclarationOrCollectionMemberDeclaration(); + } + } + setState(296); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentificationVariableDeclarationOrCollectionMemberDeclarationContext extends ParserRuleContext { + public Identification_variable_declarationContext identification_variable_declaration() { + return getRuleContext(Identification_variable_declarationContext.class,0); + } + public Collection_member_declarationContext collection_member_declaration() { + return getRuleContext(Collection_member_declarationContext.class,0); + } + public IdentificationVariableDeclarationOrCollectionMemberDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identificationVariableDeclarationOrCollectionMemberDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterIdentificationVariableDeclarationOrCollectionMemberDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitIdentificationVariableDeclarationOrCollectionMemberDeclaration(this); + } + } + + public final IdentificationVariableDeclarationOrCollectionMemberDeclarationContext identificationVariableDeclarationOrCollectionMemberDeclaration() throws RecognitionException { + IdentificationVariableDeclarationOrCollectionMemberDeclarationContext _localctx = new IdentificationVariableDeclarationOrCollectionMemberDeclarationContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_identificationVariableDeclarationOrCollectionMemberDeclaration); + try { + setState(299); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 1); + { + setState(297); + identification_variable_declaration(); + } + break; + case IN: + enterOuterAlt(_localctx, 2); + { + setState(298); + collection_member_declaration(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Identification_variable_declarationContext extends ParserRuleContext { + public Range_variable_declarationContext range_variable_declaration() { + return getRuleContext(Range_variable_declarationContext.class,0); + } + public List join() { + return getRuleContexts(JoinContext.class); + } + public JoinContext join(int i) { + return getRuleContext(JoinContext.class,i); + } + public List fetch_join() { + return getRuleContexts(Fetch_joinContext.class); + } + public Fetch_joinContext fetch_join(int i) { + return getRuleContext(Fetch_joinContext.class,i); + } + public Identification_variable_declarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identification_variable_declaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterIdentification_variable_declaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitIdentification_variable_declaration(this); + } + } + + public final Identification_variable_declarationContext identification_variable_declaration() throws RecognitionException { + Identification_variable_declarationContext _localctx = new Identification_variable_declarationContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_identification_variable_declaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(301); + range_variable_declaration(); + setState(306); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 5332261958806667264L) != 0)) { + { + setState(304); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { + case 1: + { + setState(302); + join(); + } + break; + case 2: + { + setState(303); + fetch_join(); + } + break; + } + } + setState(308); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Range_variable_declarationContext extends ParserRuleContext { + public Entity_nameContext entity_name() { + return getRuleContext(Entity_nameContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public Range_variable_declarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_range_variable_declaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterRange_variable_declaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitRange_variable_declaration(this); + } + } + + public final Range_variable_declarationContext range_variable_declaration() throws RecognitionException { + Range_variable_declarationContext _localctx = new Range_variable_declarationContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_range_variable_declaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(309); + entity_name(); + setState(311); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(310); + match(AS); + } + } + + setState(313); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class JoinContext extends ParserRuleContext { + public Join_specContext join_spec() { + return getRuleContext(Join_specContext.class,0); + } + public Join_association_path_expressionContext join_association_path_expression() { + return getRuleContext(Join_association_path_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public Join_conditionContext join_condition() { + return getRuleContext(Join_conditionContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public JoinContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_join; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterJoin(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitJoin(this); + } + } + + public final JoinContext join() throws RecognitionException { + JoinContext _localctx = new JoinContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_join); + int _la; + try { + setState(328); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(315); + join_spec(); + setState(316); + join_association_path_expression(); + setState(318); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(317); + match(AS); + } + } + + setState(320); + identification_variable(); + setState(322); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ON) { + { + setState(321); + join_condition(); + } + } + + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(324); + join_spec(); + setState(325); + join_association_path_expression(); + setState(326); + where_clause(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Fetch_joinContext extends ParserRuleContext { + public Join_specContext join_spec() { + return getRuleContext(Join_specContext.class,0); + } + public TerminalNode FETCH() { return getToken(JpqlParser.FETCH, 0); } + public Join_association_path_expressionContext join_association_path_expression() { + return getRuleContext(Join_association_path_expressionContext.class,0); + } + public Fetch_joinContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fetch_join; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFetch_join(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFetch_join(this); + } + } + + public final Fetch_joinContext fetch_join() throws RecognitionException { + Fetch_joinContext _localctx = new Fetch_joinContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_fetch_join); + try { + enterOuterAlt(_localctx, 1); + { + setState(330); + join_spec(); + setState(331); + match(FETCH); + setState(332); + join_association_path_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Join_specContext extends ParserRuleContext { + public TerminalNode JOIN() { return getToken(JpqlParser.JOIN, 0); } + public TerminalNode INNER() { return getToken(JpqlParser.INNER, 0); } + public TerminalNode LEFT() { return getToken(JpqlParser.LEFT, 0); } + public TerminalNode OUTER() { return getToken(JpqlParser.OUTER, 0); } + public Join_specContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_join_spec; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterJoin_spec(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitJoin_spec(this); + } + } + + public final Join_specContext join_spec() throws RecognitionException { + Join_specContext _localctx = new Join_specContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_join_spec); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(339); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LEFT: + { + { + setState(334); + match(LEFT); + setState(336); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OUTER) { + { + setState(335); + match(OUTER); + } + } + + } + } + break; + case INNER: + { + setState(338); + match(INNER); + } + break; + case JOIN: + break; + default: + break; + } + setState(341); + match(JOIN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Join_conditionContext extends ParserRuleContext { + public TerminalNode ON() { return getToken(JpqlParser.ON, 0); } + public Conditional_expressionContext conditional_expression() { + return getRuleContext(Conditional_expressionContext.class,0); + } + public Join_conditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_join_condition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterJoin_condition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitJoin_condition(this); + } + } + + public final Join_conditionContext join_condition() throws RecognitionException { + Join_conditionContext _localctx = new Join_conditionContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_join_condition); + try { + enterOuterAlt(_localctx, 1); + { + setState(343); + match(ON); + setState(344); + conditional_expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Join_association_path_expressionContext extends ParserRuleContext { + public Join_collection_valued_path_expressionContext join_collection_valued_path_expression() { + return getRuleContext(Join_collection_valued_path_expressionContext.class,0); + } + public Join_single_valued_path_expressionContext join_single_valued_path_expression() { + return getRuleContext(Join_single_valued_path_expressionContext.class,0); + } + public TerminalNode TREAT() { return getToken(JpqlParser.TREAT, 0); } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public SubtypeContext subtype() { + return getRuleContext(SubtypeContext.class,0); + } + public Join_association_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_join_association_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterJoin_association_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitJoin_association_path_expression(this); + } + } + + public final Join_association_path_expressionContext join_association_path_expression() throws RecognitionException { + Join_association_path_expressionContext _localctx = new Join_association_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_join_association_path_expression); + try { + setState(362); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(346); + join_collection_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(347); + join_single_valued_path_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(348); + match(TREAT); + setState(349); + match(T__1); + setState(350); + join_collection_valued_path_expression(); + setState(351); + match(AS); + setState(352); + subtype(); + setState(353); + match(T__2); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(355); + match(TREAT); + setState(356); + match(T__1); + setState(357); + join_single_valued_path_expression(); + setState(358); + match(AS); + setState(359); + subtype(); + setState(360); + match(T__2); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Join_collection_valued_path_expressionContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Collection_valued_fieldContext collection_valued_field() { + return getRuleContext(Collection_valued_fieldContext.class,0); + } + public List single_valued_embeddable_object_field() { + return getRuleContexts(Single_valued_embeddable_object_fieldContext.class); + } + public Single_valued_embeddable_object_fieldContext single_valued_embeddable_object_field(int i) { + return getRuleContext(Single_valued_embeddable_object_fieldContext.class,i); + } + public Join_collection_valued_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_join_collection_valued_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterJoin_collection_valued_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitJoin_collection_valued_path_expression(this); + } + } + + public final Join_collection_valued_path_expressionContext join_collection_valued_path_expression() throws RecognitionException { + Join_collection_valued_path_expressionContext _localctx = new Join_collection_valued_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_join_collection_valued_path_expression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(364); + identification_variable(); + setState(365); + match(T__3); + setState(371); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,18,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(366); + single_valued_embeddable_object_field(); + setState(367); + match(T__3); + } + } + } + setState(373); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,18,_ctx); + } + setState(374); + collection_valued_field(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Join_single_valued_path_expressionContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Single_valued_object_fieldContext single_valued_object_field() { + return getRuleContext(Single_valued_object_fieldContext.class,0); + } + public List single_valued_embeddable_object_field() { + return getRuleContexts(Single_valued_embeddable_object_fieldContext.class); + } + public Single_valued_embeddable_object_fieldContext single_valued_embeddable_object_field(int i) { + return getRuleContext(Single_valued_embeddable_object_fieldContext.class,i); + } + public Join_single_valued_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_join_single_valued_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterJoin_single_valued_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitJoin_single_valued_path_expression(this); + } + } + + public final Join_single_valued_path_expressionContext join_single_valued_path_expression() throws RecognitionException { + Join_single_valued_path_expressionContext _localctx = new Join_single_valued_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_join_single_valued_path_expression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(376); + identification_variable(); + setState(377); + match(T__3); + setState(383); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(378); + single_valued_embeddable_object_field(); + setState(379); + match(T__3); + } + } + } + setState(385); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + } + setState(386); + single_valued_object_field(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Collection_member_declarationContext extends ParserRuleContext { + public TerminalNode IN() { return getToken(JpqlParser.IN, 0); } + public Collection_valued_path_expressionContext collection_valued_path_expression() { + return getRuleContext(Collection_valued_path_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public Collection_member_declarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collection_member_declaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCollection_member_declaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCollection_member_declaration(this); + } + } + + public final Collection_member_declarationContext collection_member_declaration() throws RecognitionException { + Collection_member_declarationContext _localctx = new Collection_member_declarationContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_collection_member_declaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(388); + match(IN); + setState(389); + match(T__1); + setState(390); + collection_valued_path_expression(); + setState(391); + match(T__2); + setState(393); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(392); + match(AS); + } + } + + setState(395); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Qualified_identification_variableContext extends ParserRuleContext { + public Map_field_identification_variableContext map_field_identification_variable() { + return getRuleContext(Map_field_identification_variableContext.class,0); + } + public TerminalNode ENTRY() { return getToken(JpqlParser.ENTRY, 0); } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Qualified_identification_variableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_qualified_identification_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterQualified_identification_variable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitQualified_identification_variable(this); + } + } + + public final Qualified_identification_variableContext qualified_identification_variable() throws RecognitionException { + Qualified_identification_variableContext _localctx = new Qualified_identification_variableContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_qualified_identification_variable); + try { + setState(403); + _errHandler.sync(this); + switch (_input.LA(1)) { + case KEY: + case VALUE: + enterOuterAlt(_localctx, 1); + { + setState(397); + map_field_identification_variable(); + } + break; + case ENTRY: + enterOuterAlt(_localctx, 2); + { + setState(398); + match(ENTRY); + setState(399); + match(T__1); + setState(400); + identification_variable(); + setState(401); + match(T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Map_field_identification_variableContext extends ParserRuleContext { + public TerminalNode KEY() { return getToken(JpqlParser.KEY, 0); } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode VALUE() { return getToken(JpqlParser.VALUE, 0); } + public Map_field_identification_variableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_map_field_identification_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterMap_field_identification_variable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitMap_field_identification_variable(this); + } + } + + public final Map_field_identification_variableContext map_field_identification_variable() throws RecognitionException { + Map_field_identification_variableContext _localctx = new Map_field_identification_variableContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_map_field_identification_variable); + try { + setState(415); + _errHandler.sync(this); + switch (_input.LA(1)) { + case KEY: + enterOuterAlt(_localctx, 1); + { + setState(405); + match(KEY); + setState(406); + match(T__1); + setState(407); + identification_variable(); + setState(408); + match(T__2); + } + break; + case VALUE: + enterOuterAlt(_localctx, 2); + { + setState(410); + match(VALUE); + setState(411); + match(T__1); + setState(412); + identification_variable(); + setState(413); + match(T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Single_valued_path_expressionContext extends ParserRuleContext { + public Qualified_identification_variableContext qualified_identification_variable() { + return getRuleContext(Qualified_identification_variableContext.class,0); + } + public TerminalNode TREAT() { return getToken(JpqlParser.TREAT, 0); } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public SubtypeContext subtype() { + return getRuleContext(SubtypeContext.class,0); + } + public State_field_path_expressionContext state_field_path_expression() { + return getRuleContext(State_field_path_expressionContext.class,0); + } + public Single_valued_object_path_expressionContext single_valued_object_path_expression() { + return getRuleContext(Single_valued_object_path_expressionContext.class,0); + } + public Single_valued_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_single_valued_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSingle_valued_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSingle_valued_path_expression(this); + } + } + + public final Single_valued_path_expressionContext single_valued_path_expression() throws RecognitionException { + Single_valued_path_expressionContext _localctx = new Single_valued_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_single_valued_path_expression); + try { + setState(427); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(417); + qualified_identification_variable(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(418); + match(TREAT); + setState(419); + match(T__1); + setState(420); + qualified_identification_variable(); + setState(421); + match(AS); + setState(422); + subtype(); + setState(423); + match(T__2); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(425); + state_field_path_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(426); + single_valued_object_path_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class General_identification_variableContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Map_field_identification_variableContext map_field_identification_variable() { + return getRuleContext(Map_field_identification_variableContext.class,0); + } + public General_identification_variableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_general_identification_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterGeneral_identification_variable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitGeneral_identification_variable(this); + } + } + + public final General_identification_variableContext general_identification_variable() throws RecognitionException { + General_identification_variableContext _localctx = new General_identification_variableContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_general_identification_variable); + try { + setState(431); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(429); + identification_variable(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(430); + map_field_identification_variable(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class General_subpathContext extends ParserRuleContext { + public Simple_subpathContext simple_subpath() { + return getRuleContext(Simple_subpathContext.class,0); + } + public Treated_subpathContext treated_subpath() { + return getRuleContext(Treated_subpathContext.class,0); + } + public List single_valued_object_field() { + return getRuleContexts(Single_valued_object_fieldContext.class); + } + public Single_valued_object_fieldContext single_valued_object_field(int i) { + return getRuleContext(Single_valued_object_fieldContext.class,i); + } + public General_subpathContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_general_subpath; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterGeneral_subpath(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitGeneral_subpath(this); + } + } + + public final General_subpathContext general_subpath() throws RecognitionException { + General_subpathContext _localctx = new General_subpathContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_general_subpath); + try { + int _alt; + setState(442); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 1); + { + setState(433); + simple_subpath(); + } + break; + case TREAT: + enterOuterAlt(_localctx, 2); + { + setState(434); + treated_subpath(); + setState(439); + _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(435); + match(T__3); + setState(436); + single_valued_object_field(); + } + } + } + setState(441); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,25,_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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_subpathContext extends ParserRuleContext { + public General_identification_variableContext general_identification_variable() { + return getRuleContext(General_identification_variableContext.class,0); + } + public List single_valued_object_field() { + return getRuleContexts(Single_valued_object_fieldContext.class); + } + public Single_valued_object_fieldContext single_valued_object_field(int i) { + return getRuleContext(Single_valued_object_fieldContext.class,i); + } + public Simple_subpathContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_subpath; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_subpath(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_subpath(this); + } + } + + public final Simple_subpathContext simple_subpath() throws RecognitionException { + Simple_subpathContext _localctx = new Simple_subpathContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_simple_subpath); + try { + int _alt; + setState(453); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(444); + general_identification_variable(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(445); + general_identification_variable(); + setState(450); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,27,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(446); + match(T__3); + setState(447); + single_valued_object_field(); + } + } + } + setState(452); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,27,_ctx); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Treated_subpathContext extends ParserRuleContext { + public TerminalNode TREAT() { return getToken(JpqlParser.TREAT, 0); } + public General_subpathContext general_subpath() { + return getRuleContext(General_subpathContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public SubtypeContext subtype() { + return getRuleContext(SubtypeContext.class,0); + } + public Treated_subpathContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_treated_subpath; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterTreated_subpath(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitTreated_subpath(this); + } + } + + public final Treated_subpathContext treated_subpath() throws RecognitionException { + Treated_subpathContext _localctx = new Treated_subpathContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_treated_subpath); + try { + enterOuterAlt(_localctx, 1); + { + setState(455); + match(TREAT); + setState(456); + match(T__1); + setState(457); + general_subpath(); + setState(458); + match(AS); + setState(459); + subtype(); + setState(460); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class State_field_path_expressionContext extends ParserRuleContext { + public General_subpathContext general_subpath() { + return getRuleContext(General_subpathContext.class,0); + } + public State_fieldContext state_field() { + return getRuleContext(State_fieldContext.class,0); + } + public State_field_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_state_field_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterState_field_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitState_field_path_expression(this); + } + } + + public final State_field_path_expressionContext state_field_path_expression() throws RecognitionException { + State_field_path_expressionContext _localctx = new State_field_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_state_field_path_expression); + try { + enterOuterAlt(_localctx, 1); + { + setState(462); + general_subpath(); + setState(463); + match(T__3); + setState(464); + state_field(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class State_valued_path_expressionContext extends ParserRuleContext { + public State_field_path_expressionContext state_field_path_expression() { + return getRuleContext(State_field_path_expressionContext.class,0); + } + public General_identification_variableContext general_identification_variable() { + return getRuleContext(General_identification_variableContext.class,0); + } + public State_valued_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_state_valued_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterState_valued_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitState_valued_path_expression(this); + } + } + + public final State_valued_path_expressionContext state_valued_path_expression() throws RecognitionException { + State_valued_path_expressionContext _localctx = new State_valued_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_state_valued_path_expression); + try { + setState(468); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(466); + state_field_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(467); + general_identification_variable(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Single_valued_object_path_expressionContext extends ParserRuleContext { + public General_subpathContext general_subpath() { + return getRuleContext(General_subpathContext.class,0); + } + public Single_valued_object_fieldContext single_valued_object_field() { + return getRuleContext(Single_valued_object_fieldContext.class,0); + } + public Single_valued_object_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_single_valued_object_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSingle_valued_object_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSingle_valued_object_path_expression(this); + } + } + + public final Single_valued_object_path_expressionContext single_valued_object_path_expression() throws RecognitionException { + Single_valued_object_path_expressionContext _localctx = new Single_valued_object_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_single_valued_object_path_expression); + try { + enterOuterAlt(_localctx, 1); + { + setState(470); + general_subpath(); + setState(471); + match(T__3); + setState(472); + single_valued_object_field(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Collection_valued_path_expressionContext extends ParserRuleContext { + public General_subpathContext general_subpath() { + return getRuleContext(General_subpathContext.class,0); + } + public Collection_value_fieldContext collection_value_field() { + return getRuleContext(Collection_value_fieldContext.class,0); + } + public Collection_valued_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collection_valued_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCollection_valued_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCollection_valued_path_expression(this); + } + } + + public final Collection_valued_path_expressionContext collection_valued_path_expression() throws RecognitionException { + Collection_valued_path_expressionContext _localctx = new Collection_valued_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_collection_valued_path_expression); + try { + enterOuterAlt(_localctx, 1); + { + setState(474); + general_subpath(); + setState(475); + match(T__3); + setState(476); + collection_value_field(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Update_clauseContext extends ParserRuleContext { + public TerminalNode UPDATE() { return getToken(JpqlParser.UPDATE, 0); } + public Entity_nameContext entity_name() { + return getRuleContext(Entity_nameContext.class,0); + } + public TerminalNode SET() { return getToken(JpqlParser.SET, 0); } + public List update_item() { + return getRuleContexts(Update_itemContext.class); + } + public Update_itemContext update_item(int i) { + return getRuleContext(Update_itemContext.class,i); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public Update_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_update_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterUpdate_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitUpdate_clause(this); + } + } + + public final Update_clauseContext update_clause() throws RecognitionException { + Update_clauseContext _localctx = new Update_clauseContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_update_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(478); + match(UPDATE); + setState(479); + entity_name(); + setState(484); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 5909848647526252544L) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & 34965833473L) != 0)) { + { + setState(481); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(480); + match(AS); + } + } + + setState(483); + identification_variable(); + } + } + + setState(486); + match(SET); + setState(487); + update_item(); + setState(492); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(488); + match(T__0); + setState(489); + update_item(); + } + } + setState(494); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Update_itemContext extends ParserRuleContext { + public TerminalNode EQUAL() { return getToken(JpqlParser.EQUAL, 0); } + public New_valueContext new_value() { + return getRuleContext(New_valueContext.class,0); + } + public State_fieldContext state_field() { + return getRuleContext(State_fieldContext.class,0); + } + public Single_valued_object_fieldContext single_valued_object_field() { + return getRuleContext(Single_valued_object_fieldContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public List single_valued_embeddable_object_field() { + return getRuleContexts(Single_valued_embeddable_object_fieldContext.class); + } + public Single_valued_embeddable_object_fieldContext single_valued_embeddable_object_field(int i) { + return getRuleContext(Single_valued_embeddable_object_fieldContext.class,i); + } + public Update_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_update_item; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterUpdate_item(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitUpdate_item(this); + } + } + + public final Update_itemContext update_item() throws RecognitionException { + Update_itemContext _localctx = new Update_itemContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_update_item); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(498); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { + case 1: + { + setState(495); + identification_variable(); + setState(496); + match(T__3); + } + break; + } + setState(505); + _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(500); + single_valued_embeddable_object_field(); + setState(501); + match(T__3); + } + } + } + setState(507); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + } + setState(510); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + { + setState(508); + state_field(); + } + break; + case 2: + { + setState(509); + single_valued_object_field(); + } + break; + } + setState(512); + match(EQUAL); + setState(513); + new_value(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class New_valueContext extends ParserRuleContext { + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public Simple_entity_expressionContext simple_entity_expression() { + return getRuleContext(Simple_entity_expressionContext.class,0); + } + public TerminalNode NULL() { return getToken(JpqlParser.NULL, 0); } + public New_valueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_new_value; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterNew_value(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitNew_value(this); + } + } + + public final New_valueContext new_value() throws RecognitionException { + New_valueContext _localctx = new New_valueContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_new_value); + try { + setState(518); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(515); + scalar_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(516); + simple_entity_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(517); + match(NULL); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Delete_clauseContext extends ParserRuleContext { + public TerminalNode DELETE() { return getToken(JpqlParser.DELETE, 0); } + public TerminalNode FROM() { return getToken(JpqlParser.FROM, 0); } + public Entity_nameContext entity_name() { + return getRuleContext(Entity_nameContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public Delete_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_delete_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDelete_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDelete_clause(this); + } + } + + public final Delete_clauseContext delete_clause() throws RecognitionException { + Delete_clauseContext _localctx = new Delete_clauseContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_delete_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(520); + match(DELETE); + setState(521); + match(FROM); + setState(522); + entity_name(); + setState(527); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 5909848647526252544L) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & 34965833473L) != 0)) { + { + setState(524); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(523); + match(AS); + } + } + + setState(526); + identification_variable(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Select_clauseContext extends ParserRuleContext { + public TerminalNode SELECT() { return getToken(JpqlParser.SELECT, 0); } + public List select_item() { + return getRuleContexts(Select_itemContext.class); + } + public Select_itemContext select_item(int i) { + return getRuleContext(Select_itemContext.class,i); + } + public TerminalNode DISTINCT() { return getToken(JpqlParser.DISTINCT, 0); } + public Select_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSelect_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSelect_clause(this); + } + } + + public final Select_clauseContext select_clause() throws RecognitionException { + Select_clauseContext _localctx = new Select_clauseContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_select_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(529); + match(SELECT); + setState(531); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISTINCT) { + { + setState(530); + match(DISTINCT); + } + } + + setState(533); + select_item(); + setState(538); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(534); + match(T__0); + setState(535); + select_item(); + } + } + setState(540); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Select_itemContext extends ParserRuleContext { + public Select_expressionContext select_expression() { + return getRuleContext(Select_expressionContext.class,0); + } + public Result_variableContext result_variable() { + return getRuleContext(Result_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public Select_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_item; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSelect_item(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSelect_item(this); + } + } + + public final Select_itemContext select_item() throws RecognitionException { + Select_itemContext _localctx = new Select_itemContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_select_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(541); + select_expression(); + setState(546); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 5909848647526252544L) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & 34965833473L) != 0)) { + { + setState(543); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(542); + match(AS); + } + } + + setState(545); + result_variable(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Select_expressionContext extends ParserRuleContext { + public Single_valued_path_expressionContext single_valued_path_expression() { + return getRuleContext(Single_valued_path_expressionContext.class,0); + } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public Aggregate_expressionContext aggregate_expression() { + return getRuleContext(Aggregate_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode OBJECT() { return getToken(JpqlParser.OBJECT, 0); } + public Constructor_expressionContext constructor_expression() { + return getRuleContext(Constructor_expressionContext.class,0); + } + public Select_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSelect_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSelect_expression(this); + } + } + + public final Select_expressionContext select_expression() throws RecognitionException { + Select_expressionContext _localctx = new Select_expressionContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_select_expression); + try { + setState(558); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(548); + single_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(549); + scalar_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(550); + aggregate_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(551); + identification_variable(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(552); + match(OBJECT); + setState(553); + match(T__1); + setState(554); + identification_variable(); + setState(555); + match(T__2); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(557); + constructor_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Constructor_expressionContext extends ParserRuleContext { + public TerminalNode NEW() { return getToken(JpqlParser.NEW, 0); } + public Constructor_nameContext constructor_name() { + return getRuleContext(Constructor_nameContext.class,0); + } + public List constructor_item() { + return getRuleContexts(Constructor_itemContext.class); + } + public Constructor_itemContext constructor_item(int i) { + return getRuleContext(Constructor_itemContext.class,i); + } + public Constructor_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constructor_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConstructor_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConstructor_expression(this); + } + } + + public final Constructor_expressionContext constructor_expression() throws RecognitionException { + Constructor_expressionContext _localctx = new Constructor_expressionContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_constructor_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(560); + match(NEW); + setState(561); + constructor_name(); + setState(562); + match(T__1); + setState(563); + constructor_item(); + setState(568); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(564); + match(T__0); + setState(565); + constructor_item(); + } + } + setState(570); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(571); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Constructor_itemContext extends ParserRuleContext { + public Single_valued_path_expressionContext single_valued_path_expression() { + return getRuleContext(Single_valued_path_expressionContext.class,0); + } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public Aggregate_expressionContext aggregate_expression() { + return getRuleContext(Aggregate_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public Constructor_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constructor_item; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConstructor_item(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConstructor_item(this); + } + } + + public final Constructor_itemContext constructor_item() throws RecognitionException { + Constructor_itemContext _localctx = new Constructor_itemContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_constructor_item); + try { + setState(578); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(573); + single_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(574); + scalar_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(575); + aggregate_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(576); + identification_variable(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(577); + literal(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Aggregate_expressionContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public TerminalNode AVG() { return getToken(JpqlParser.AVG, 0); } + public TerminalNode MAX() { return getToken(JpqlParser.MAX, 0); } + public TerminalNode MIN() { return getToken(JpqlParser.MIN, 0); } + public TerminalNode SUM() { return getToken(JpqlParser.SUM, 0); } + public TerminalNode DISTINCT() { return getToken(JpqlParser.DISTINCT, 0); } + public TerminalNode COUNT() { return getToken(JpqlParser.COUNT, 0); } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Single_valued_object_path_expressionContext single_valued_object_path_expression() { + return getRuleContext(Single_valued_object_path_expressionContext.class,0); + } + public Function_invocationContext function_invocation() { + return getRuleContext(Function_invocationContext.class,0); + } + public Aggregate_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_aggregate_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterAggregate_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitAggregate_expression(this); + } + } + + public final Aggregate_expressionContext aggregate_expression() throws RecognitionException { + Aggregate_expressionContext _localctx = new Aggregate_expressionContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_aggregate_expression); + int _la; + try { + setState(601); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AVG: + case MAX: + case MIN: + case SUM: + enterOuterAlt(_localctx, 1); + { + setState(580); + _la = _input.LA(1); + if ( !(_la==AVG || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 8388613L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(581); + match(T__1); + setState(583); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISTINCT) { + { + setState(582); + match(DISTINCT); + } + } + + setState(585); + state_valued_path_expression(); + setState(586); + match(T__2); + } + break; + case COUNT: + enterOuterAlt(_localctx, 2); + { + setState(588); + match(COUNT); + setState(589); + match(T__1); + setState(591); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISTINCT) { + { + setState(590); + match(DISTINCT); + } + } + + setState(596); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { + case 1: + { + setState(593); + identification_variable(); + } + break; + case 2: + { + setState(594); + state_valued_path_expression(); + } + break; + case 3: + { + setState(595); + single_valued_object_path_expression(); + } + break; + } + setState(598); + match(T__2); + } + break; + case FUNCTION: + enterOuterAlt(_localctx, 3); + { + setState(600); + function_invocation(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Where_clauseContext extends ParserRuleContext { + public TerminalNode WHERE() { return getToken(JpqlParser.WHERE, 0); } + public Conditional_expressionContext conditional_expression() { + return getRuleContext(Conditional_expressionContext.class,0); + } + public Where_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_where_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterWhere_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitWhere_clause(this); + } + } + + public final Where_clauseContext where_clause() throws RecognitionException { + Where_clauseContext _localctx = new Where_clauseContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_where_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(603); + match(WHERE); + setState(604); + conditional_expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Groupby_clauseContext extends ParserRuleContext { + public TerminalNode GROUP() { return getToken(JpqlParser.GROUP, 0); } + public TerminalNode BY() { return getToken(JpqlParser.BY, 0); } + public List groupby_item() { + return getRuleContexts(Groupby_itemContext.class); + } + public Groupby_itemContext groupby_item(int i) { + return getRuleContext(Groupby_itemContext.class,i); + } + public Groupby_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_groupby_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterGroupby_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitGroupby_clause(this); + } + } + + public final Groupby_clauseContext groupby_clause() throws RecognitionException { + Groupby_clauseContext _localctx = new Groupby_clauseContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_groupby_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(606); + match(GROUP); + setState(607); + match(BY); + setState(608); + groupby_item(); + setState(613); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(609); + match(T__0); + setState(610); + groupby_item(); + } + } + setState(615); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Groupby_itemContext extends ParserRuleContext { + public Single_valued_path_expressionContext single_valued_path_expression() { + return getRuleContext(Single_valued_path_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Groupby_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_groupby_item; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterGroupby_item(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitGroupby_item(this); + } + } + + public final Groupby_itemContext groupby_item() throws RecognitionException { + Groupby_itemContext _localctx = new Groupby_itemContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_groupby_item); + try { + setState(618); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(616); + single_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(617); + identification_variable(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Having_clauseContext extends ParserRuleContext { + public TerminalNode HAVING() { return getToken(JpqlParser.HAVING, 0); } + public Conditional_expressionContext conditional_expression() { + return getRuleContext(Conditional_expressionContext.class,0); + } + public Having_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_having_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterHaving_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitHaving_clause(this); + } + } + + public final Having_clauseContext having_clause() throws RecognitionException { + Having_clauseContext _localctx = new Having_clauseContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_having_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(620); + match(HAVING); + setState(621); + conditional_expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Orderby_clauseContext extends ParserRuleContext { + public TerminalNode ORDER() { return getToken(JpqlParser.ORDER, 0); } + public TerminalNode BY() { return getToken(JpqlParser.BY, 0); } + public List orderby_item() { + return getRuleContexts(Orderby_itemContext.class); + } + public Orderby_itemContext orderby_item(int i) { + return getRuleContext(Orderby_itemContext.class,i); + } + public Orderby_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderby_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterOrderby_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitOrderby_clause(this); + } + } + + public final Orderby_clauseContext orderby_clause() throws RecognitionException { + Orderby_clauseContext _localctx = new Orderby_clauseContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_orderby_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(623); + match(ORDER); + setState(624); + match(BY); + setState(625); + orderby_item(); + setState(630); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(626); + match(T__0); + setState(627); + orderby_item(); + } + } + setState(632); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Orderby_itemContext extends ParserRuleContext { + public State_field_path_expressionContext state_field_path_expression() { + return getRuleContext(State_field_path_expressionContext.class,0); + } + public General_identification_variableContext general_identification_variable() { + return getRuleContext(General_identification_variableContext.class,0); + } + public Result_variableContext result_variable() { + return getRuleContext(Result_variableContext.class,0); + } + public TerminalNode ASC() { return getToken(JpqlParser.ASC, 0); } + public TerminalNode DESC() { return getToken(JpqlParser.DESC, 0); } + public Orderby_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderby_item; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterOrderby_item(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitOrderby_item(this); + } + } + + public final Orderby_itemContext orderby_item() throws RecognitionException { + Orderby_itemContext _localctx = new Orderby_itemContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_orderby_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(636); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) { + case 1: + { + setState(633); + state_field_path_expression(); + } + break; + case 2: + { + setState(634); + general_identification_variable(); + } + break; + case 3: + { + setState(635); + result_variable(); + } + break; + } + setState(639); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ASC || _la==DESC) { + { + setState(638); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class SubqueryContext extends ParserRuleContext { + public Simple_select_clauseContext simple_select_clause() { + return getRuleContext(Simple_select_clauseContext.class,0); + } + public Subquery_from_clauseContext subquery_from_clause() { + return getRuleContext(Subquery_from_clauseContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public Groupby_clauseContext groupby_clause() { + return getRuleContext(Groupby_clauseContext.class,0); + } + public Having_clauseContext having_clause() { + return getRuleContext(Having_clauseContext.class,0); + } + public SubqueryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subquery; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSubquery(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSubquery(this); + } + } + + public final SubqueryContext subquery() throws RecognitionException { + SubqueryContext _localctx = new SubqueryContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_subquery); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(641); + simple_select_clause(); + setState(642); + subquery_from_clause(); + setState(644); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(643); + where_clause(); + } + } + + setState(647); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GROUP) { + { + setState(646); + groupby_clause(); + } + } + + setState(650); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==HAVING) { + { + setState(649); + having_clause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Subquery_from_clauseContext extends ParserRuleContext { + public TerminalNode FROM() { return getToken(JpqlParser.FROM, 0); } + public List subselect_identification_variable_declaration() { + return getRuleContexts(Subselect_identification_variable_declarationContext.class); + } + public Subselect_identification_variable_declarationContext subselect_identification_variable_declaration(int i) { + return getRuleContext(Subselect_identification_variable_declarationContext.class,i); + } + public List collection_member_declaration() { + return getRuleContexts(Collection_member_declarationContext.class); + } + public Collection_member_declarationContext collection_member_declaration(int i) { + return getRuleContext(Collection_member_declarationContext.class,i); + } + public Subquery_from_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subquery_from_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSubquery_from_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSubquery_from_clause(this); + } + } + + public final Subquery_from_clauseContext subquery_from_clause() throws RecognitionException { + Subquery_from_clauseContext _localctx = new Subquery_from_clauseContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_subquery_from_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(652); + match(FROM); + setState(653); + subselect_identification_variable_declaration(); + setState(661); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(654); + match(T__0); + setState(657); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { + case 1: + { + setState(655); + subselect_identification_variable_declaration(); + } + break; + case 2: + { + setState(656); + collection_member_declaration(); + } + break; + } + } + } + setState(663); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Subselect_identification_variable_declarationContext extends ParserRuleContext { + public Identification_variable_declarationContext identification_variable_declaration() { + return getRuleContext(Identification_variable_declarationContext.class,0); + } + public Derived_path_expressionContext derived_path_expression() { + return getRuleContext(Derived_path_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public List join() { + return getRuleContexts(JoinContext.class); + } + public JoinContext join(int i) { + return getRuleContext(JoinContext.class,i); + } + public Derived_collection_member_declarationContext derived_collection_member_declaration() { + return getRuleContext(Derived_collection_member_declarationContext.class,0); + } + public Subselect_identification_variable_declarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subselect_identification_variable_declaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSubselect_identification_variable_declaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSubselect_identification_variable_declaration(this); + } + } + + public final Subselect_identification_variable_declarationContext subselect_identification_variable_declaration() throws RecognitionException { + Subselect_identification_variable_declarationContext _localctx = new Subselect_identification_variable_declarationContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_subselect_identification_variable_declaration); + int _la; + try { + setState(677); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(664); + identification_variable_declaration(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(665); + derived_path_expression(); + setState(667); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(666); + match(AS); + } + } + + setState(669); + identification_variable(); + setState(673); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 5332261958806667264L) != 0)) { + { + { + setState(670); + join(); + } + } + setState(675); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(676); + derived_collection_member_declaration(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Derived_path_expressionContext extends ParserRuleContext { + public General_derived_pathContext general_derived_path() { + return getRuleContext(General_derived_pathContext.class,0); + } + public Single_valued_object_fieldContext single_valued_object_field() { + return getRuleContext(Single_valued_object_fieldContext.class,0); + } + public Collection_valued_fieldContext collection_valued_field() { + return getRuleContext(Collection_valued_fieldContext.class,0); + } + public Derived_path_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_derived_path_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDerived_path_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDerived_path_expression(this); + } + } + + public final Derived_path_expressionContext derived_path_expression() throws RecognitionException { + Derived_path_expressionContext _localctx = new Derived_path_expressionContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_derived_path_expression); + try { + setState(687); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(679); + general_derived_path(); + setState(680); + match(T__3); + setState(681); + single_valued_object_field(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(683); + general_derived_path(); + setState(684); + match(T__3); + setState(685); + collection_valued_field(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class General_derived_pathContext extends ParserRuleContext { + public Simple_derived_pathContext simple_derived_path() { + return getRuleContext(Simple_derived_pathContext.class,0); + } + public Treated_derived_pathContext treated_derived_path() { + return getRuleContext(Treated_derived_pathContext.class,0); + } + public List single_valued_object_field() { + return getRuleContexts(Single_valued_object_fieldContext.class); + } + public Single_valued_object_fieldContext single_valued_object_field(int i) { + return getRuleContext(Single_valued_object_fieldContext.class,i); + } + public General_derived_pathContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_general_derived_path; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterGeneral_derived_path(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitGeneral_derived_path(this); + } + } + + public final General_derived_pathContext general_derived_path() throws RecognitionException { + General_derived_pathContext _localctx = new General_derived_pathContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_general_derived_path); + try { + int _alt; + setState(698); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 1); + { + setState(689); + simple_derived_path(); + } + break; + case TREAT: + enterOuterAlt(_localctx, 2); + { + setState(690); + treated_derived_path(); + setState(695); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,64,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(691); + match(T__3); + setState(692); + single_valued_object_field(); + } + } + } + setState(697); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,64,_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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_derived_pathContext extends ParserRuleContext { + public Superquery_identification_variableContext superquery_identification_variable() { + return getRuleContext(Superquery_identification_variableContext.class,0); + } + public List single_valued_object_field() { + return getRuleContexts(Single_valued_object_fieldContext.class); + } + public Single_valued_object_fieldContext single_valued_object_field(int i) { + return getRuleContext(Single_valued_object_fieldContext.class,i); + } + public Simple_derived_pathContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_derived_path; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_derived_path(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_derived_path(this); + } + } + + public final Simple_derived_pathContext simple_derived_path() throws RecognitionException { + Simple_derived_pathContext _localctx = new Simple_derived_pathContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_simple_derived_path); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(700); + superquery_identification_variable(); + setState(705); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,66,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(701); + match(T__3); + setState(702); + single_valued_object_field(); + } + } + } + setState(707); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,66,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Treated_derived_pathContext extends ParserRuleContext { + public TerminalNode TREAT() { return getToken(JpqlParser.TREAT, 0); } + public General_derived_pathContext general_derived_path() { + return getRuleContext(General_derived_pathContext.class,0); + } + public TerminalNode AS() { return getToken(JpqlParser.AS, 0); } + public SubtypeContext subtype() { + return getRuleContext(SubtypeContext.class,0); + } + public Treated_derived_pathContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_treated_derived_path; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterTreated_derived_path(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitTreated_derived_path(this); + } + } + + public final Treated_derived_pathContext treated_derived_path() throws RecognitionException { + Treated_derived_pathContext _localctx = new Treated_derived_pathContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_treated_derived_path); + try { + enterOuterAlt(_localctx, 1); + { + setState(708); + match(TREAT); + setState(709); + match(T__1); + setState(710); + general_derived_path(); + setState(711); + match(AS); + setState(712); + subtype(); + setState(713); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Derived_collection_member_declarationContext extends ParserRuleContext { + public TerminalNode IN() { return getToken(JpqlParser.IN, 0); } + public Superquery_identification_variableContext superquery_identification_variable() { + return getRuleContext(Superquery_identification_variableContext.class,0); + } + public Collection_valued_fieldContext collection_valued_field() { + return getRuleContext(Collection_valued_fieldContext.class,0); + } + public List single_valued_object_field() { + return getRuleContexts(Single_valued_object_fieldContext.class); + } + public Single_valued_object_fieldContext single_valued_object_field(int i) { + return getRuleContext(Single_valued_object_fieldContext.class,i); + } + public Derived_collection_member_declarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_derived_collection_member_declaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDerived_collection_member_declaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDerived_collection_member_declaration(this); + } + } + + public final Derived_collection_member_declarationContext derived_collection_member_declaration() throws RecognitionException { + Derived_collection_member_declarationContext _localctx = new Derived_collection_member_declarationContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_derived_collection_member_declaration); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(715); + match(IN); + setState(716); + superquery_identification_variable(); + setState(717); + match(T__3); + setState(723); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,67,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(718); + single_valued_object_field(); + setState(719); + match(T__3); + } + } + } + setState(725); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,67,_ctx); + } + setState(726); + collection_valued_field(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_select_clauseContext extends ParserRuleContext { + public TerminalNode SELECT() { return getToken(JpqlParser.SELECT, 0); } + public Simple_select_expressionContext simple_select_expression() { + return getRuleContext(Simple_select_expressionContext.class,0); + } + public TerminalNode DISTINCT() { return getToken(JpqlParser.DISTINCT, 0); } + public Simple_select_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_select_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_select_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_select_clause(this); + } + } + + public final Simple_select_clauseContext simple_select_clause() throws RecognitionException { + Simple_select_clauseContext _localctx = new Simple_select_clauseContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_simple_select_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(728); + match(SELECT); + setState(730); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DISTINCT) { + { + setState(729); + match(DISTINCT); + } + } + + setState(732); + simple_select_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_select_expressionContext extends ParserRuleContext { + public Single_valued_path_expressionContext single_valued_path_expression() { + return getRuleContext(Single_valued_path_expressionContext.class,0); + } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public Aggregate_expressionContext aggregate_expression() { + return getRuleContext(Aggregate_expressionContext.class,0); + } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Simple_select_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_select_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_select_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_select_expression(this); + } + } + + public final Simple_select_expressionContext simple_select_expression() throws RecognitionException { + Simple_select_expressionContext _localctx = new Simple_select_expressionContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_simple_select_expression); + try { + setState(738); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,69,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(734); + single_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(735); + scalar_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(736); + aggregate_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(737); + identification_variable(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Scalar_expressionContext extends ParserRuleContext { + public Arithmetic_expressionContext arithmetic_expression() { + return getRuleContext(Arithmetic_expressionContext.class,0); + } + public String_expressionContext string_expression() { + return getRuleContext(String_expressionContext.class,0); + } + public Enum_expressionContext enum_expression() { + return getRuleContext(Enum_expressionContext.class,0); + } + public Datetime_expressionContext datetime_expression() { + return getRuleContext(Datetime_expressionContext.class,0); + } + public Boolean_expressionContext boolean_expression() { + return getRuleContext(Boolean_expressionContext.class,0); + } + public Case_expressionContext case_expression() { + return getRuleContext(Case_expressionContext.class,0); + } + public Entity_type_expressionContext entity_type_expression() { + return getRuleContext(Entity_type_expressionContext.class,0); + } + public Scalar_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scalar_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterScalar_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitScalar_expression(this); + } + } + + public final Scalar_expressionContext scalar_expression() throws RecognitionException { + Scalar_expressionContext _localctx = new Scalar_expressionContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_scalar_expression); + try { + setState(747); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(740); + arithmetic_expression(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(741); + string_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(742); + enum_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(743); + datetime_expression(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(744); + boolean_expression(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(745); + case_expression(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(746); + entity_type_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Conditional_expressionContext extends ParserRuleContext { + public Conditional_termContext conditional_term() { + return getRuleContext(Conditional_termContext.class,0); + } + public Conditional_expressionContext conditional_expression() { + return getRuleContext(Conditional_expressionContext.class,0); + } + public TerminalNode OR() { return getToken(JpqlParser.OR, 0); } + public Conditional_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conditional_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConditional_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConditional_expression(this); + } + } + + public final Conditional_expressionContext conditional_expression() throws RecognitionException { + return conditional_expression(0); + } + + private Conditional_expressionContext conditional_expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + Conditional_expressionContext _localctx = new Conditional_expressionContext(_ctx, _parentState); + Conditional_expressionContext _prevctx = _localctx; + int _startState = 110; + enterRecursionRule(_localctx, 110, RULE_conditional_expression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(750); + conditional_term(0); + } + _ctx.stop = _input.LT(-1); + setState(757); + _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 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new Conditional_expressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_conditional_expression); + setState(752); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(753); + match(OR); + setState(754); + conditional_term(0); + } + } + } + setState(759); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,71,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Conditional_termContext extends ParserRuleContext { + public Conditional_factorContext conditional_factor() { + return getRuleContext(Conditional_factorContext.class,0); + } + public Conditional_termContext conditional_term() { + return getRuleContext(Conditional_termContext.class,0); + } + public TerminalNode AND() { return getToken(JpqlParser.AND, 0); } + public Conditional_termContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conditional_term; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConditional_term(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConditional_term(this); + } + } + + public final Conditional_termContext conditional_term() throws RecognitionException { + return conditional_term(0); + } + + private Conditional_termContext conditional_term(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + Conditional_termContext _localctx = new Conditional_termContext(_ctx, _parentState); + Conditional_termContext _prevctx = _localctx; + int _startState = 112; + enterRecursionRule(_localctx, 112, RULE_conditional_term, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(761); + conditional_factor(); + } + _ctx.stop = _input.LT(-1); + setState(768); + _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 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new Conditional_termContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_conditional_term); + setState(763); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(764); + match(AND); + setState(765); + conditional_factor(); + } + } + } + setState(770); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,72,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Conditional_factorContext extends ParserRuleContext { + public Conditional_primaryContext conditional_primary() { + return getRuleContext(Conditional_primaryContext.class,0); + } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public Conditional_factorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conditional_factor; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConditional_factor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConditional_factor(this); + } + } + + public final Conditional_factorContext conditional_factor() throws RecognitionException { + Conditional_factorContext _localctx = new Conditional_factorContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_conditional_factor); + try { + enterOuterAlt(_localctx, 1); + { + setState(772); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) { + case 1: + { + setState(771); + match(NOT); + } + break; + } + setState(774); + conditional_primary(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Conditional_primaryContext extends ParserRuleContext { + public Simple_cond_expressionContext simple_cond_expression() { + return getRuleContext(Simple_cond_expressionContext.class,0); + } + public Conditional_expressionContext conditional_expression() { + return getRuleContext(Conditional_expressionContext.class,0); + } + public Conditional_primaryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conditional_primary; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConditional_primary(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConditional_primary(this); + } + } + + public final Conditional_primaryContext conditional_primary() throws RecognitionException { + Conditional_primaryContext _localctx = new Conditional_primaryContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_conditional_primary); + try { + setState(781); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,74,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(776); + simple_cond_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(777); + match(T__1); + setState(778); + conditional_expression(0); + setState(779); + match(T__2); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_cond_expressionContext extends ParserRuleContext { + public Comparison_expressionContext comparison_expression() { + return getRuleContext(Comparison_expressionContext.class,0); + } + public Between_expressionContext between_expression() { + return getRuleContext(Between_expressionContext.class,0); + } + public In_expressionContext in_expression() { + return getRuleContext(In_expressionContext.class,0); + } + public Like_expressionContext like_expression() { + return getRuleContext(Like_expressionContext.class,0); + } + public Null_comparison_expressionContext null_comparison_expression() { + return getRuleContext(Null_comparison_expressionContext.class,0); + } + public Empty_collection_comparison_expressionContext empty_collection_comparison_expression() { + return getRuleContext(Empty_collection_comparison_expressionContext.class,0); + } + public Collection_member_expressionContext collection_member_expression() { + return getRuleContext(Collection_member_expressionContext.class,0); + } + public Exists_expressionContext exists_expression() { + return getRuleContext(Exists_expressionContext.class,0); + } + public Simple_cond_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_cond_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_cond_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_cond_expression(this); + } + } + + public final Simple_cond_expressionContext simple_cond_expression() throws RecognitionException { + Simple_cond_expressionContext _localctx = new Simple_cond_expressionContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_simple_cond_expression); + try { + setState(791); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(783); + comparison_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(784); + between_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(785); + in_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(786); + like_expression(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(787); + null_comparison_expression(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(788); + empty_collection_comparison_expression(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(789); + collection_member_expression(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(790); + exists_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Between_expressionContext extends ParserRuleContext { + public List arithmetic_expression() { + return getRuleContexts(Arithmetic_expressionContext.class); + } + public Arithmetic_expressionContext arithmetic_expression(int i) { + return getRuleContext(Arithmetic_expressionContext.class,i); + } + public TerminalNode BETWEEN() { return getToken(JpqlParser.BETWEEN, 0); } + public TerminalNode AND() { return getToken(JpqlParser.AND, 0); } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public List string_expression() { + return getRuleContexts(String_expressionContext.class); + } + public String_expressionContext string_expression(int i) { + return getRuleContext(String_expressionContext.class,i); + } + public List datetime_expression() { + return getRuleContexts(Datetime_expressionContext.class); + } + public Datetime_expressionContext datetime_expression(int i) { + return getRuleContext(Datetime_expressionContext.class,i); + } + public Between_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_between_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterBetween_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitBetween_expression(this); + } + } + + public final Between_expressionContext between_expression() throws RecognitionException { + Between_expressionContext _localctx = new Between_expressionContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_between_expression); + int _la; + try { + setState(820); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,79,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(793); + arithmetic_expression(0); + setState(795); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(794); + match(NOT); + } + } + + setState(797); + match(BETWEEN); + setState(798); + arithmetic_expression(0); + setState(799); + match(AND); + setState(800); + arithmetic_expression(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(802); + string_expression(); + setState(804); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(803); + match(NOT); + } + } + + setState(806); + match(BETWEEN); + setState(807); + string_expression(); + setState(808); + match(AND); + setState(809); + string_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(811); + datetime_expression(); + setState(813); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(812); + match(NOT); + } + } + + setState(815); + match(BETWEEN); + setState(816); + datetime_expression(); + setState(817); + match(AND); + setState(818); + datetime_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class In_expressionContext extends ParserRuleContext { + public TerminalNode IN() { return getToken(JpqlParser.IN, 0); } + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Type_discriminatorContext type_discriminator() { + return getRuleContext(Type_discriminatorContext.class,0); + } + public Collection_valued_input_parameterContext collection_valued_input_parameter() { + return getRuleContext(Collection_valued_input_parameterContext.class,0); + } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public List in_item() { + return getRuleContexts(In_itemContext.class); + } + public In_itemContext in_item(int i) { + return getRuleContext(In_itemContext.class,i); + } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public In_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_in_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterIn_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitIn_expression(this); + } + } + + public final In_expressionContext in_expression() throws RecognitionException { + In_expressionContext _localctx = new In_expressionContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_in_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(824); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { + case 1: + { + setState(822); + state_valued_path_expression(); + } + break; + case 2: + { + setState(823); + type_discriminator(); + } + break; + } + setState(827); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(826); + match(NOT); + } + } + + setState(829); + match(IN); + setState(846); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) { + case 1: + { + { + setState(830); + match(T__1); + setState(831); + in_item(); + setState(836); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(832); + match(T__0); + setState(833); + in_item(); + } + } + setState(838); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(839); + match(T__2); + } + } + break; + case 2: + { + { + setState(841); + match(T__1); + setState(842); + subquery(); + setState(843); + match(T__2); + } + } + break; + case 3: + { + setState(845); + collection_valued_input_parameter(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class In_itemContext extends ParserRuleContext { + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public Single_valued_input_parameterContext single_valued_input_parameter() { + return getRuleContext(Single_valued_input_parameterContext.class,0); + } + public In_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_in_item; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterIn_item(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitIn_item(this); + } + } + + public final In_itemContext in_item() throws RecognitionException { + In_itemContext _localctx = new In_itemContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_in_item); + try { + setState(850); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case FALSE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TRUE: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + case STRINGLITERAL: + case JAVASTRINGLITERAL: + case FLOATLITERAL: + case INTLITERAL: + case LONGLITERAL: + enterOuterAlt(_localctx, 1); + { + setState(848); + literal(); + } + break; + case T__12: + case T__13: + enterOuterAlt(_localctx, 2); + { + setState(849); + single_valued_input_parameter(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Like_expressionContext extends ParserRuleContext { + public String_expressionContext string_expression() { + return getRuleContext(String_expressionContext.class,0); + } + public TerminalNode LIKE() { return getToken(JpqlParser.LIKE, 0); } + public Pattern_valueContext pattern_value() { + return getRuleContext(Pattern_valueContext.class,0); + } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public TerminalNode ESCAPE() { return getToken(JpqlParser.ESCAPE, 0); } + public Escape_characterContext escape_character() { + return getRuleContext(Escape_characterContext.class,0); + } + public Like_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_like_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterLike_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitLike_expression(this); + } + } + + public final Like_expressionContext like_expression() throws RecognitionException { + Like_expressionContext _localctx = new Like_expressionContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_like_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(852); + string_expression(); + setState(854); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(853); + match(NOT); + } + } + + setState(856); + match(LIKE); + setState(857); + pattern_value(); + setState(860); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) { + case 1: + { + setState(858); + match(ESCAPE); + setState(859); + escape_character(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Null_comparison_expressionContext extends ParserRuleContext { + public TerminalNode IS() { return getToken(JpqlParser.IS, 0); } + public TerminalNode NULL() { return getToken(JpqlParser.NULL, 0); } + public Single_valued_path_expressionContext single_valued_path_expression() { + return getRuleContext(Single_valued_path_expressionContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public Null_comparison_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_null_comparison_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterNull_comparison_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitNull_comparison_expression(this); + } + } + + public final Null_comparison_expressionContext null_comparison_expression() throws RecognitionException { + Null_comparison_expressionContext _localctx = new Null_comparison_expressionContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_null_comparison_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(864); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case ENTRY: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TREAT: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + { + setState(862); + single_valued_path_expression(); + } + break; + case T__12: + case T__13: + { + setState(863); + input_parameter(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(866); + match(IS); + setState(868); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(867); + match(NOT); + } + } + + setState(870); + match(NULL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Empty_collection_comparison_expressionContext extends ParserRuleContext { + public Collection_valued_path_expressionContext collection_valued_path_expression() { + return getRuleContext(Collection_valued_path_expressionContext.class,0); + } + public TerminalNode IS() { return getToken(JpqlParser.IS, 0); } + public TerminalNode EMPTY() { return getToken(JpqlParser.EMPTY, 0); } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public Empty_collection_comparison_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_empty_collection_comparison_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEmpty_collection_comparison_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEmpty_collection_comparison_expression(this); + } + } + + public final Empty_collection_comparison_expressionContext empty_collection_comparison_expression() throws RecognitionException { + Empty_collection_comparison_expressionContext _localctx = new Empty_collection_comparison_expressionContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_empty_collection_comparison_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(872); + collection_valued_path_expression(); + setState(873); + match(IS); + setState(875); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(874); + match(NOT); + } + } + + setState(877); + match(EMPTY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Collection_member_expressionContext extends ParserRuleContext { + public Entity_or_value_expressionContext entity_or_value_expression() { + return getRuleContext(Entity_or_value_expressionContext.class,0); + } + public TerminalNode MEMBER() { return getToken(JpqlParser.MEMBER, 0); } + public Collection_valued_path_expressionContext collection_valued_path_expression() { + return getRuleContext(Collection_valued_path_expressionContext.class,0); + } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public TerminalNode OF() { return getToken(JpqlParser.OF, 0); } + public Collection_member_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collection_member_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCollection_member_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCollection_member_expression(this); + } + } + + public final Collection_member_expressionContext collection_member_expression() throws RecognitionException { + Collection_member_expressionContext _localctx = new Collection_member_expressionContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_collection_member_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(879); + entity_or_value_expression(); + setState(881); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(880); + match(NOT); + } + } + + setState(883); + match(MEMBER); + setState(885); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OF) { + { + setState(884); + match(OF); + } + } + + setState(887); + collection_valued_path_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Entity_or_value_expressionContext extends ParserRuleContext { + public Single_valued_object_path_expressionContext single_valued_object_path_expression() { + return getRuleContext(Single_valued_object_path_expressionContext.class,0); + } + public State_field_path_expressionContext state_field_path_expression() { + return getRuleContext(State_field_path_expressionContext.class,0); + } + public Simple_entity_or_value_expressionContext simple_entity_or_value_expression() { + return getRuleContext(Simple_entity_or_value_expressionContext.class,0); + } + public Entity_or_value_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_entity_or_value_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEntity_or_value_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEntity_or_value_expression(this); + } + } + + public final Entity_or_value_expressionContext entity_or_value_expression() throws RecognitionException { + Entity_or_value_expressionContext _localctx = new Entity_or_value_expressionContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_entity_or_value_expression); + try { + setState(892); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(889); + single_valued_object_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(890); + state_field_path_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(891); + simple_entity_or_value_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_entity_or_value_expressionContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public Simple_entity_or_value_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_entity_or_value_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_entity_or_value_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_entity_or_value_expression(this); + } + } + + public final Simple_entity_or_value_expressionContext simple_entity_or_value_expression() throws RecognitionException { + Simple_entity_or_value_expressionContext _localctx = new Simple_entity_or_value_expressionContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_simple_entity_or_value_expression); + try { + setState(897); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(894); + identification_variable(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(895); + input_parameter(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(896); + literal(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Exists_expressionContext extends ParserRuleContext { + public TerminalNode EXISTS() { return getToken(JpqlParser.EXISTS, 0); } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public TerminalNode NOT() { return getToken(JpqlParser.NOT, 0); } + public Exists_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exists_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterExists_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitExists_expression(this); + } + } + + public final Exists_expressionContext exists_expression() throws RecognitionException { + Exists_expressionContext _localctx = new Exists_expressionContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_exists_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(900); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(899); + match(NOT); + } + } + + setState(902); + match(EXISTS); + setState(903); + match(T__1); + setState(904); + subquery(); + setState(905); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class All_or_any_expressionContext extends ParserRuleContext { + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public TerminalNode ALL() { return getToken(JpqlParser.ALL, 0); } + public TerminalNode ANY() { return getToken(JpqlParser.ANY, 0); } + public TerminalNode SOME() { return getToken(JpqlParser.SOME, 0); } + public All_or_any_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_all_or_any_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterAll_or_any_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitAll_or_any_expression(this); + } + } + + public final All_or_any_expressionContext all_or_any_expression() throws RecognitionException { + All_or_any_expressionContext _localctx = new All_or_any_expressionContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_all_or_any_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(907); + _la = _input.LA(1); + if ( !(_la==ALL || _la==ANY || _la==SOME) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(908); + match(T__1); + setState(909); + subquery(); + setState(910); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Comparison_expressionContext extends ParserRuleContext { + public Token op; + public List string_expression() { + return getRuleContexts(String_expressionContext.class); + } + public String_expressionContext string_expression(int i) { + return getRuleContext(String_expressionContext.class,i); + } + public Comparison_operatorContext comparison_operator() { + return getRuleContext(Comparison_operatorContext.class,0); + } + public All_or_any_expressionContext all_or_any_expression() { + return getRuleContext(All_or_any_expressionContext.class,0); + } + public List boolean_expression() { + return getRuleContexts(Boolean_expressionContext.class); + } + public Boolean_expressionContext boolean_expression(int i) { + return getRuleContext(Boolean_expressionContext.class,i); + } + public TerminalNode EQUAL() { return getToken(JpqlParser.EQUAL, 0); } + public TerminalNode NOT_EQUAL() { return getToken(JpqlParser.NOT_EQUAL, 0); } + public List enum_expression() { + return getRuleContexts(Enum_expressionContext.class); + } + public Enum_expressionContext enum_expression(int i) { + return getRuleContext(Enum_expressionContext.class,i); + } + public List datetime_expression() { + return getRuleContexts(Datetime_expressionContext.class); + } + public Datetime_expressionContext datetime_expression(int i) { + return getRuleContext(Datetime_expressionContext.class,i); + } + public List entity_expression() { + return getRuleContexts(Entity_expressionContext.class); + } + public Entity_expressionContext entity_expression(int i) { + return getRuleContext(Entity_expressionContext.class,i); + } + public List arithmetic_expression() { + return getRuleContexts(Arithmetic_expressionContext.class); + } + public Arithmetic_expressionContext arithmetic_expression(int i) { + return getRuleContext(Arithmetic_expressionContext.class,i); + } + public List entity_type_expression() { + return getRuleContexts(Entity_type_expressionContext.class); + } + public Entity_type_expressionContext entity_type_expression(int i) { + return getRuleContext(Entity_type_expressionContext.class,i); + } + public Comparison_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparison_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterComparison_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitComparison_expression(this); + } + } + + public final Comparison_expressionContext comparison_expression() throws RecognitionException { + Comparison_expressionContext _localctx = new Comparison_expressionContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_comparison_expression); + int _la; + try { + setState(952); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,101,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(912); + string_expression(); + setState(913); + comparison_operator(); + setState(916); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case T__12: + case T__13: + case AVG: + case CASE: + case COALESCE: + case CONCAT: + case COUNT: + case DATE: + case FLOOR: + case FUNCTION: + case INNER: + case KEY: + case LEFT: + case LOWER: + case MAX: + case MIN: + case NEW: + case NULLIF: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case SUBSTRING: + case SUM: + case TIME: + case TREAT: + case TRIM: + case TYPE: + case UPPER: + case VALUE: + case CHARACTER: + case IDENTIFICATION_VARIABLE: + case STRINGLITERAL: + { + setState(914); + string_expression(); + } + break; + case ALL: + case ANY: + case SOME: + { + setState(915); + all_or_any_expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(918); + boolean_expression(); + setState(919); + ((Comparison_expressionContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==EQUAL || _la==NOT_EQUAL) ) { + ((Comparison_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(922); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case T__12: + case T__13: + case CASE: + case COALESCE: + case COUNT: + case DATE: + case FALSE: + case FLOOR: + case FUNCTION: + case INNER: + case KEY: + case LEFT: + case NEW: + case NULLIF: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TREAT: + case TRUE: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + { + setState(920); + boolean_expression(); + } + break; + case ALL: + case ANY: + case SOME: + { + setState(921); + all_or_any_expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(924); + enum_expression(); + setState(925); + ((Comparison_expressionContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==EQUAL || _la==NOT_EQUAL) ) { + ((Comparison_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(928); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case T__12: + case T__13: + case CASE: + case COALESCE: + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case NULLIF: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TREAT: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + { + setState(926); + enum_expression(); + } + break; + case ALL: + case ANY: + case SOME: + { + setState(927); + all_or_any_expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(930); + datetime_expression(); + setState(931); + comparison_operator(); + setState(934); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case T__12: + case T__13: + case AVG: + case CASE: + case COALESCE: + case COUNT: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case EXTRACT: + case FLOOR: + case FUNCTION: + case INNER: + case KEY: + case LEFT: + case LOCAL: + case MAX: + case MIN: + case NEW: + case NULLIF: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case SUM: + case TIME: + case TREAT: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + case STRINGLITERAL: + { + setState(932); + datetime_expression(); + } + break; + case ALL: + case ANY: + case SOME: + { + setState(933); + all_or_any_expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(936); + entity_expression(); + setState(937); + ((Comparison_expressionContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==EQUAL || _la==NOT_EQUAL) ) { + ((Comparison_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(940); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__12: + case T__13: + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TREAT: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + { + setState(938); + entity_expression(); + } + break; + case ALL: + case ANY: + case SOME: + { + setState(939); + all_or_any_expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(942); + arithmetic_expression(0); + setState(943); + comparison_operator(); + setState(946); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case T__8: + case T__9: + case T__12: + case T__13: + case ABS: + case AVG: + case CASE: + case CEILING: + case COALESCE: + case COUNT: + case DATE: + case EXP: + case EXTRACT: + case FLOOR: + case FUNCTION: + case INDEX: + case INNER: + case KEY: + case LEFT: + case LENGTH: + case LN: + case LOCATE: + case MAX: + case MIN: + case MOD: + case NEW: + case NULLIF: + case ORDER: + case OUTER: + case POWER: + case ROUND: + case SIGN: + case SIZE: + case SQRT: + case SUM: + case TIME: + case TREAT: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + case FLOATLITERAL: + case INTLITERAL: + case LONGLITERAL: + { + setState(944); + arithmetic_expression(0); + } + break; + case ALL: + case ANY: + case SOME: + { + setState(945); + all_or_any_expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(948); + entity_type_expression(); + setState(949); + ((Comparison_expressionContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==EQUAL || _la==NOT_EQUAL) ) { + ((Comparison_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(950); + entity_type_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Comparison_operatorContext extends ParserRuleContext { + public Token op; + public TerminalNode EQUAL() { return getToken(JpqlParser.EQUAL, 0); } + public TerminalNode NOT_EQUAL() { return getToken(JpqlParser.NOT_EQUAL, 0); } + public Comparison_operatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparison_operator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterComparison_operator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitComparison_operator(this); + } + } + + public final Comparison_operatorContext comparison_operator() throws RecognitionException { + Comparison_operatorContext _localctx = new Comparison_operatorContext(_ctx, getState()); + enterRule(_localctx, 144, RULE_comparison_operator); + try { + setState(960); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EQUAL: + enterOuterAlt(_localctx, 1); + { + setState(954); + ((Comparison_operatorContext)_localctx).op = match(EQUAL); + } + break; + case T__4: + enterOuterAlt(_localctx, 2); + { + setState(955); + ((Comparison_operatorContext)_localctx).op = match(T__4); + } + break; + case T__5: + enterOuterAlt(_localctx, 3); + { + setState(956); + ((Comparison_operatorContext)_localctx).op = match(T__5); + } + break; + case T__6: + enterOuterAlt(_localctx, 4); + { + setState(957); + ((Comparison_operatorContext)_localctx).op = match(T__6); + } + break; + case T__7: + enterOuterAlt(_localctx, 5); + { + setState(958); + ((Comparison_operatorContext)_localctx).op = match(T__7); + } + break; + case NOT_EQUAL: + enterOuterAlt(_localctx, 6); + { + setState(959); + ((Comparison_operatorContext)_localctx).op = match(NOT_EQUAL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Arithmetic_expressionContext extends ParserRuleContext { + public Token op; + public Arithmetic_termContext arithmetic_term() { + return getRuleContext(Arithmetic_termContext.class,0); + } + public Arithmetic_expressionContext arithmetic_expression() { + return getRuleContext(Arithmetic_expressionContext.class,0); + } + public Arithmetic_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arithmetic_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterArithmetic_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitArithmetic_expression(this); + } + } + + public final Arithmetic_expressionContext arithmetic_expression() throws RecognitionException { + return arithmetic_expression(0); + } + + private Arithmetic_expressionContext arithmetic_expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + Arithmetic_expressionContext _localctx = new Arithmetic_expressionContext(_ctx, _parentState); + Arithmetic_expressionContext _prevctx = _localctx; + int _startState = 146; + enterRecursionRule(_localctx, 146, RULE_arithmetic_expression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(963); + arithmetic_term(0); + } + _ctx.stop = _input.LT(-1); + setState(970); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,103,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new Arithmetic_expressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_arithmetic_expression); + setState(965); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(966); + ((Arithmetic_expressionContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==T__8 || _la==T__9) ) { + ((Arithmetic_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(967); + arithmetic_term(0); + } + } + } + setState(972); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,103,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Arithmetic_termContext extends ParserRuleContext { + public Token op; + public Arithmetic_factorContext arithmetic_factor() { + return getRuleContext(Arithmetic_factorContext.class,0); + } + public Arithmetic_termContext arithmetic_term() { + return getRuleContext(Arithmetic_termContext.class,0); + } + public Arithmetic_termContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arithmetic_term; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterArithmetic_term(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitArithmetic_term(this); + } + } + + public final Arithmetic_termContext arithmetic_term() throws RecognitionException { + return arithmetic_term(0); + } + + private Arithmetic_termContext arithmetic_term(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + Arithmetic_termContext _localctx = new Arithmetic_termContext(_ctx, _parentState); + Arithmetic_termContext _prevctx = _localctx; + int _startState = 148; + enterRecursionRule(_localctx, 148, RULE_arithmetic_term, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(974); + arithmetic_factor(); + } + _ctx.stop = _input.LT(-1); + setState(981); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,104,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new Arithmetic_termContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_arithmetic_term); + setState(976); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(977); + ((Arithmetic_termContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==T__10 || _la==T__11) ) { + ((Arithmetic_termContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(978); + arithmetic_factor(); + } + } + } + setState(983); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,104,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Arithmetic_factorContext extends ParserRuleContext { + public Token op; + public Arithmetic_primaryContext arithmetic_primary() { + return getRuleContext(Arithmetic_primaryContext.class,0); + } + public Arithmetic_factorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arithmetic_factor; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterArithmetic_factor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitArithmetic_factor(this); + } + } + + public final Arithmetic_factorContext arithmetic_factor() throws RecognitionException { + Arithmetic_factorContext _localctx = new Arithmetic_factorContext(_ctx, getState()); + enterRule(_localctx, 150, RULE_arithmetic_factor); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(985); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__8 || _la==T__9) { + { + setState(984); + ((Arithmetic_factorContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==T__8 || _la==T__9) ) { + ((Arithmetic_factorContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(987); + arithmetic_primary(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Arithmetic_primaryContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Numeric_literalContext numeric_literal() { + return getRuleContext(Numeric_literalContext.class,0); + } + public Arithmetic_expressionContext arithmetic_expression() { + return getRuleContext(Arithmetic_expressionContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Functions_returning_numericsContext functions_returning_numerics() { + return getRuleContext(Functions_returning_numericsContext.class,0); + } + public Aggregate_expressionContext aggregate_expression() { + return getRuleContext(Aggregate_expressionContext.class,0); + } + public Case_expressionContext case_expression() { + return getRuleContext(Case_expressionContext.class,0); + } + public Function_invocationContext function_invocation() { + return getRuleContext(Function_invocationContext.class,0); + } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public Arithmetic_primaryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arithmetic_primary; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterArithmetic_primary(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitArithmetic_primary(this); + } + } + + public final Arithmetic_primaryContext arithmetic_primary() throws RecognitionException { + Arithmetic_primaryContext _localctx = new Arithmetic_primaryContext(_ctx, getState()); + enterRule(_localctx, 152, RULE_arithmetic_primary); + try { + setState(1004); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(989); + state_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(990); + numeric_literal(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(991); + match(T__1); + setState(992); + arithmetic_expression(0); + setState(993); + match(T__2); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(995); + input_parameter(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(996); + functions_returning_numerics(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(997); + aggregate_expression(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(998); + case_expression(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(999); + function_invocation(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(1000); + match(T__1); + setState(1001); + subquery(); + setState(1002); + match(T__2); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class String_expressionContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public String_literalContext string_literal() { + return getRuleContext(String_literalContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Functions_returning_stringsContext functions_returning_strings() { + return getRuleContext(Functions_returning_stringsContext.class,0); + } + public Aggregate_expressionContext aggregate_expression() { + return getRuleContext(Aggregate_expressionContext.class,0); + } + public Case_expressionContext case_expression() { + return getRuleContext(Case_expressionContext.class,0); + } + public Function_invocationContext function_invocation() { + return getRuleContext(Function_invocationContext.class,0); + } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public String_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_string_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterString_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitString_expression(this); + } + } + + public final String_expressionContext string_expression() throws RecognitionException { + String_expressionContext _localctx = new String_expressionContext(_ctx, getState()); + enterRule(_localctx, 154, RULE_string_expression); + try { + setState(1017); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1006); + state_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1007); + string_literal(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1008); + input_parameter(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1009); + functions_returning_strings(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1010); + aggregate_expression(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1011); + case_expression(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(1012); + function_invocation(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(1013); + match(T__1); + setState(1014); + subquery(); + setState(1015); + match(T__2); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Datetime_expressionContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Functions_returning_datetimeContext functions_returning_datetime() { + return getRuleContext(Functions_returning_datetimeContext.class,0); + } + public Aggregate_expressionContext aggregate_expression() { + return getRuleContext(Aggregate_expressionContext.class,0); + } + public Case_expressionContext case_expression() { + return getRuleContext(Case_expressionContext.class,0); + } + public Function_invocationContext function_invocation() { + return getRuleContext(Function_invocationContext.class,0); + } + public Date_time_timestamp_literalContext date_time_timestamp_literal() { + return getRuleContext(Date_time_timestamp_literalContext.class,0); + } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public Datetime_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_datetime_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDatetime_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDatetime_expression(this); + } + } + + public final Datetime_expressionContext datetime_expression() throws RecognitionException { + Datetime_expressionContext _localctx = new Datetime_expressionContext(_ctx, getState()); + enterRule(_localctx, 156, RULE_datetime_expression); + try { + setState(1030); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,108,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1019); + state_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1020); + input_parameter(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1021); + functions_returning_datetime(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1022); + aggregate_expression(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1023); + case_expression(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1024); + function_invocation(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(1025); + date_time_timestamp_literal(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(1026); + match(T__1); + setState(1027); + subquery(); + setState(1028); + match(T__2); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Boolean_expressionContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Boolean_literalContext boolean_literal() { + return getRuleContext(Boolean_literalContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Case_expressionContext case_expression() { + return getRuleContext(Case_expressionContext.class,0); + } + public Function_invocationContext function_invocation() { + return getRuleContext(Function_invocationContext.class,0); + } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public Boolean_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolean_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterBoolean_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitBoolean_expression(this); + } + } + + public final Boolean_expressionContext boolean_expression() throws RecognitionException { + Boolean_expressionContext _localctx = new Boolean_expressionContext(_ctx, getState()); + enterRule(_localctx, 158, RULE_boolean_expression); + try { + setState(1041); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TREAT: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 1); + { + setState(1032); + state_valued_path_expression(); + } + break; + case FALSE: + case TRUE: + enterOuterAlt(_localctx, 2); + { + setState(1033); + boolean_literal(); + } + break; + case T__12: + case T__13: + enterOuterAlt(_localctx, 3); + { + setState(1034); + input_parameter(); + } + break; + case CASE: + case COALESCE: + case NULLIF: + enterOuterAlt(_localctx, 4); + { + setState(1035); + case_expression(); + } + break; + case FUNCTION: + enterOuterAlt(_localctx, 5); + { + setState(1036); + function_invocation(); + } + break; + case T__1: + enterOuterAlt(_localctx, 6); + { + setState(1037); + match(T__1); + setState(1038); + subquery(); + setState(1039); + match(T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Enum_expressionContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Enum_literalContext enum_literal() { + return getRuleContext(Enum_literalContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Case_expressionContext case_expression() { + return getRuleContext(Case_expressionContext.class,0); + } + public SubqueryContext subquery() { + return getRuleContext(SubqueryContext.class,0); + } + public Enum_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enum_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEnum_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEnum_expression(this); + } + } + + public final Enum_expressionContext enum_expression() throws RecognitionException { + Enum_expressionContext _localctx = new Enum_expressionContext(_ctx, getState()); + enterRule(_localctx, 160, RULE_enum_expression); + try { + setState(1051); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1043); + state_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1044); + enum_literal(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1045); + input_parameter(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1046); + case_expression(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1047); + match(T__1); + setState(1048); + subquery(); + setState(1049); + match(T__2); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Entity_expressionContext extends ParserRuleContext { + public Single_valued_object_path_expressionContext single_valued_object_path_expression() { + return getRuleContext(Single_valued_object_path_expressionContext.class,0); + } + public Simple_entity_expressionContext simple_entity_expression() { + return getRuleContext(Simple_entity_expressionContext.class,0); + } + public Entity_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_entity_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEntity_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEntity_expression(this); + } + } + + public final Entity_expressionContext entity_expression() throws RecognitionException { + Entity_expressionContext _localctx = new Entity_expressionContext(_ctx, getState()); + enterRule(_localctx, 162, RULE_entity_expression); + try { + setState(1055); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1053); + single_valued_object_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1054); + simple_entity_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_entity_expressionContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Simple_entity_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_entity_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_entity_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_entity_expression(this); + } + } + + public final Simple_entity_expressionContext simple_entity_expression() throws RecognitionException { + Simple_entity_expressionContext _localctx = new Simple_entity_expressionContext(_ctx, getState()); + enterRule(_localctx, 164, RULE_simple_entity_expression); + try { + setState(1059); + _errHandler.sync(this); + switch (_input.LA(1)) { + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 1); + { + setState(1057); + identification_variable(); + } + break; + case T__12: + case T__13: + enterOuterAlt(_localctx, 2); + { + setState(1058); + input_parameter(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Entity_type_expressionContext extends ParserRuleContext { + public Type_discriminatorContext type_discriminator() { + return getRuleContext(Type_discriminatorContext.class,0); + } + public Entity_type_literalContext entity_type_literal() { + return getRuleContext(Entity_type_literalContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Entity_type_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_entity_type_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEntity_type_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEntity_type_expression(this); + } + } + + public final Entity_type_expressionContext entity_type_expression() throws RecognitionException { + Entity_type_expressionContext _localctx = new Entity_type_expressionContext(_ctx, getState()); + enterRule(_localctx, 166, RULE_entity_type_expression); + try { + setState(1064); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,113,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1061); + type_discriminator(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1062); + entity_type_literal(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1063); + input_parameter(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Type_discriminatorContext extends ParserRuleContext { + public TerminalNode TYPE() { return getToken(JpqlParser.TYPE, 0); } + public General_identification_variableContext general_identification_variable() { + return getRuleContext(General_identification_variableContext.class,0); + } + public Single_valued_object_path_expressionContext single_valued_object_path_expression() { + return getRuleContext(Single_valued_object_path_expressionContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Type_discriminatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_type_discriminator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterType_discriminator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitType_discriminator(this); + } + } + + public final Type_discriminatorContext type_discriminator() throws RecognitionException { + Type_discriminatorContext _localctx = new Type_discriminatorContext(_ctx, getState()); + enterRule(_localctx, 168, RULE_type_discriminator); + try { + enterOuterAlt(_localctx, 1); + { + setState(1066); + match(TYPE); + setState(1067); + match(T__1); + setState(1071); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,114,_ctx) ) { + case 1: + { + setState(1068); + general_identification_variable(); + } + break; + case 2: + { + setState(1069); + single_valued_object_path_expression(); + } + break; + case 3: + { + setState(1070); + input_parameter(); + } + break; + } + setState(1073); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Functions_returning_numericsContext extends ParserRuleContext { + public TerminalNode LENGTH() { return getToken(JpqlParser.LENGTH, 0); } + public List string_expression() { + return getRuleContexts(String_expressionContext.class); + } + public String_expressionContext string_expression(int i) { + return getRuleContext(String_expressionContext.class,i); + } + public TerminalNode LOCATE() { return getToken(JpqlParser.LOCATE, 0); } + public List arithmetic_expression() { + return getRuleContexts(Arithmetic_expressionContext.class); + } + public Arithmetic_expressionContext arithmetic_expression(int i) { + return getRuleContext(Arithmetic_expressionContext.class,i); + } + public TerminalNode ABS() { return getToken(JpqlParser.ABS, 0); } + public TerminalNode CEILING() { return getToken(JpqlParser.CEILING, 0); } + public TerminalNode EXP() { return getToken(JpqlParser.EXP, 0); } + public TerminalNode FLOOR() { return getToken(JpqlParser.FLOOR, 0); } + public TerminalNode LN() { return getToken(JpqlParser.LN, 0); } + public TerminalNode SIGN() { return getToken(JpqlParser.SIGN, 0); } + public TerminalNode SQRT() { return getToken(JpqlParser.SQRT, 0); } + public TerminalNode MOD() { return getToken(JpqlParser.MOD, 0); } + public TerminalNode POWER() { return getToken(JpqlParser.POWER, 0); } + public TerminalNode ROUND() { return getToken(JpqlParser.ROUND, 0); } + public TerminalNode SIZE() { return getToken(JpqlParser.SIZE, 0); } + public Collection_valued_path_expressionContext collection_valued_path_expression() { + return getRuleContext(Collection_valued_path_expressionContext.class,0); + } + public TerminalNode INDEX() { return getToken(JpqlParser.INDEX, 0); } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Extract_datetime_fieldContext extract_datetime_field() { + return getRuleContext(Extract_datetime_fieldContext.class,0); + } + public Functions_returning_numericsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functions_returning_numerics; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFunctions_returning_numerics(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFunctions_returning_numerics(this); + } + } + + public final Functions_returning_numericsContext functions_returning_numerics() throws RecognitionException { + Functions_returning_numericsContext _localctx = new Functions_returning_numericsContext(_ctx, getState()); + enterRule(_localctx, 170, RULE_functions_returning_numerics); + int _la; + try { + setState(1158); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LENGTH: + enterOuterAlt(_localctx, 1); + { + setState(1075); + match(LENGTH); + setState(1076); + match(T__1); + setState(1077); + string_expression(); + setState(1078); + match(T__2); + } + break; + case LOCATE: + enterOuterAlt(_localctx, 2); + { + setState(1080); + match(LOCATE); + setState(1081); + match(T__1); + setState(1082); + string_expression(); + setState(1083); + match(T__0); + setState(1084); + string_expression(); + setState(1087); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__0) { + { + setState(1085); + match(T__0); + setState(1086); + arithmetic_expression(0); + } + } + + setState(1089); + match(T__2); + } + break; + case ABS: + enterOuterAlt(_localctx, 3); + { + setState(1091); + match(ABS); + setState(1092); + match(T__1); + setState(1093); + arithmetic_expression(0); + setState(1094); + match(T__2); + } + break; + case CEILING: + enterOuterAlt(_localctx, 4); + { + setState(1096); + match(CEILING); + setState(1097); + match(T__1); + setState(1098); + arithmetic_expression(0); + setState(1099); + match(T__2); + } + break; + case EXP: + enterOuterAlt(_localctx, 5); + { + setState(1101); + match(EXP); + setState(1102); + match(T__1); + setState(1103); + arithmetic_expression(0); + setState(1104); + match(T__2); + } + break; + case FLOOR: + enterOuterAlt(_localctx, 6); + { + setState(1106); + match(FLOOR); + setState(1107); + match(T__1); + setState(1108); + arithmetic_expression(0); + setState(1109); + match(T__2); + } + break; + case LN: + enterOuterAlt(_localctx, 7); + { + setState(1111); + match(LN); + setState(1112); + match(T__1); + setState(1113); + arithmetic_expression(0); + setState(1114); + match(T__2); + } + break; + case SIGN: + enterOuterAlt(_localctx, 8); + { + setState(1116); + match(SIGN); + setState(1117); + match(T__1); + setState(1118); + arithmetic_expression(0); + setState(1119); + match(T__2); + } + break; + case SQRT: + enterOuterAlt(_localctx, 9); + { + setState(1121); + match(SQRT); + setState(1122); + match(T__1); + setState(1123); + arithmetic_expression(0); + setState(1124); + match(T__2); + } + break; + case MOD: + enterOuterAlt(_localctx, 10); + { + setState(1126); + match(MOD); + setState(1127); + match(T__1); + setState(1128); + arithmetic_expression(0); + setState(1129); + match(T__0); + setState(1130); + arithmetic_expression(0); + setState(1131); + match(T__2); + } + break; + case POWER: + enterOuterAlt(_localctx, 11); + { + setState(1133); + match(POWER); + setState(1134); + match(T__1); + setState(1135); + arithmetic_expression(0); + setState(1136); + match(T__0); + setState(1137); + arithmetic_expression(0); + setState(1138); + match(T__2); + } + break; + case ROUND: + enterOuterAlt(_localctx, 12); + { + setState(1140); + match(ROUND); + setState(1141); + match(T__1); + setState(1142); + arithmetic_expression(0); + setState(1143); + match(T__0); + setState(1144); + arithmetic_expression(0); + setState(1145); + match(T__2); + } + break; + case SIZE: + enterOuterAlt(_localctx, 13); + { + setState(1147); + match(SIZE); + setState(1148); + match(T__1); + setState(1149); + collection_valued_path_expression(); + setState(1150); + match(T__2); + } + break; + case INDEX: + enterOuterAlt(_localctx, 14); + { + setState(1152); + match(INDEX); + setState(1153); + match(T__1); + setState(1154); + identification_variable(); + setState(1155); + match(T__2); + } + break; + case EXTRACT: + enterOuterAlt(_localctx, 15); + { + setState(1157); + extract_datetime_field(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Functions_returning_datetimeContext extends ParserRuleContext { + public TerminalNode CURRENT_DATE() { return getToken(JpqlParser.CURRENT_DATE, 0); } + public TerminalNode CURRENT_TIME() { return getToken(JpqlParser.CURRENT_TIME, 0); } + public TerminalNode CURRENT_TIMESTAMP() { return getToken(JpqlParser.CURRENT_TIMESTAMP, 0); } + public TerminalNode LOCAL() { return getToken(JpqlParser.LOCAL, 0); } + public TerminalNode DATE() { return getToken(JpqlParser.DATE, 0); } + public TerminalNode TIME() { return getToken(JpqlParser.TIME, 0); } + public TerminalNode DATETIME() { return getToken(JpqlParser.DATETIME, 0); } + public Extract_datetime_partContext extract_datetime_part() { + return getRuleContext(Extract_datetime_partContext.class,0); + } + public Functions_returning_datetimeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functions_returning_datetime; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFunctions_returning_datetime(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFunctions_returning_datetime(this); + } + } + + public final Functions_returning_datetimeContext functions_returning_datetime() throws RecognitionException { + Functions_returning_datetimeContext _localctx = new Functions_returning_datetimeContext(_ctx, getState()); + enterRule(_localctx, 172, RULE_functions_returning_datetime); + try { + setState(1170); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,117,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1160); + match(CURRENT_DATE); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1161); + match(CURRENT_TIME); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1162); + match(CURRENT_TIMESTAMP); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1163); + match(LOCAL); + setState(1164); + match(DATE); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1165); + match(LOCAL); + setState(1166); + match(TIME); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1167); + match(LOCAL); + setState(1168); + match(DATETIME); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(1169); + extract_datetime_part(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Functions_returning_stringsContext extends ParserRuleContext { + public TerminalNode CONCAT() { return getToken(JpqlParser.CONCAT, 0); } + public List string_expression() { + return getRuleContexts(String_expressionContext.class); + } + public String_expressionContext string_expression(int i) { + return getRuleContext(String_expressionContext.class,i); + } + public TerminalNode SUBSTRING() { return getToken(JpqlParser.SUBSTRING, 0); } + public List arithmetic_expression() { + return getRuleContexts(Arithmetic_expressionContext.class); + } + public Arithmetic_expressionContext arithmetic_expression(int i) { + return getRuleContext(Arithmetic_expressionContext.class,i); + } + public TerminalNode TRIM() { return getToken(JpqlParser.TRIM, 0); } + public TerminalNode FROM() { return getToken(JpqlParser.FROM, 0); } + public Trim_specificationContext trim_specification() { + return getRuleContext(Trim_specificationContext.class,0); + } + public Trim_characterContext trim_character() { + return getRuleContext(Trim_characterContext.class,0); + } + public TerminalNode LOWER() { return getToken(JpqlParser.LOWER, 0); } + public TerminalNode UPPER() { return getToken(JpqlParser.UPPER, 0); } + public Functions_returning_stringsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functions_returning_strings; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFunctions_returning_strings(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFunctions_returning_strings(this); + } + } + + public final Functions_returning_stringsContext functions_returning_strings() throws RecognitionException { + Functions_returning_stringsContext _localctx = new Functions_returning_stringsContext(_ctx, getState()); + enterRule(_localctx, 174, RULE_functions_returning_strings); + int _la; + try { + setState(1221); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CONCAT: + enterOuterAlt(_localctx, 1); + { + setState(1172); + match(CONCAT); + setState(1173); + match(T__1); + setState(1174); + string_expression(); + setState(1175); + match(T__0); + setState(1176); + string_expression(); + setState(1181); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(1177); + match(T__0); + setState(1178); + string_expression(); + } + } + setState(1183); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1184); + match(T__2); + } + break; + case SUBSTRING: + enterOuterAlt(_localctx, 2); + { + setState(1186); + match(SUBSTRING); + setState(1187); + match(T__1); + setState(1188); + string_expression(); + setState(1189); + match(T__0); + setState(1190); + arithmetic_expression(0); + setState(1193); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__0) { + { + setState(1191); + match(T__0); + setState(1192); + arithmetic_expression(0); + } + } + + setState(1195); + match(T__2); + } + break; + case TRIM: + enterOuterAlt(_localctx, 3); + { + setState(1197); + match(TRIM); + setState(1198); + match(T__1); + setState(1206); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) { + case 1: + { + setState(1200); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==BOTH || _la==LEADING || _la==TRAILING) { + { + setState(1199); + trim_specification(); + } + } + + setState(1203); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__12 || _la==T__13 || _la==CHARACTER) { + { + setState(1202); + trim_character(); + } + } + + setState(1205); + match(FROM); + } + break; + } + setState(1208); + string_expression(); + setState(1209); + match(T__2); + } + break; + case LOWER: + enterOuterAlt(_localctx, 4); + { + setState(1211); + match(LOWER); + setState(1212); + match(T__1); + setState(1213); + string_expression(); + setState(1214); + match(T__2); + } + break; + case UPPER: + enterOuterAlt(_localctx, 5); + { + setState(1216); + match(UPPER); + setState(1217); + match(T__1); + setState(1218); + string_expression(); + setState(1219); + match(T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Trim_specificationContext extends ParserRuleContext { + public TerminalNode LEADING() { return getToken(JpqlParser.LEADING, 0); } + public TerminalNode TRAILING() { return getToken(JpqlParser.TRAILING, 0); } + public TerminalNode BOTH() { return getToken(JpqlParser.BOTH, 0); } + public Trim_specificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_trim_specification; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterTrim_specification(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitTrim_specification(this); + } + } + + public final Trim_specificationContext trim_specification() throws RecognitionException { + Trim_specificationContext _localctx = new Trim_specificationContext(_ctx, getState()); + enterRule(_localctx, 176, RULE_trim_specification); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1223); + _la = _input.LA(1); + if ( !(_la==BOTH || _la==LEADING || _la==TRAILING) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Function_invocationContext extends ParserRuleContext { + public TerminalNode FUNCTION() { return getToken(JpqlParser.FUNCTION, 0); } + public Function_nameContext function_name() { + return getRuleContext(Function_nameContext.class,0); + } + public List function_arg() { + return getRuleContexts(Function_argContext.class); + } + public Function_argContext function_arg(int i) { + return getRuleContext(Function_argContext.class,i); + } + public Function_invocationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_function_invocation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFunction_invocation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFunction_invocation(this); + } + } + + public final Function_invocationContext function_invocation() throws RecognitionException { + Function_invocationContext _localctx = new Function_invocationContext(_ctx, getState()); + enterRule(_localctx, 178, RULE_function_invocation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1225); + match(FUNCTION); + setState(1226); + match(T__1); + setState(1227); + function_name(); + setState(1232); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__0) { + { + { + setState(1228); + match(T__0); + setState(1229); + function_arg(); + } + } + setState(1234); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1235); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Extract_datetime_fieldContext extends ParserRuleContext { + public TerminalNode EXTRACT() { return getToken(JpqlParser.EXTRACT, 0); } + public Datetime_fieldContext datetime_field() { + return getRuleContext(Datetime_fieldContext.class,0); + } + public TerminalNode FROM() { return getToken(JpqlParser.FROM, 0); } + public Datetime_expressionContext datetime_expression() { + return getRuleContext(Datetime_expressionContext.class,0); + } + public Extract_datetime_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_extract_datetime_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterExtract_datetime_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitExtract_datetime_field(this); + } + } + + public final Extract_datetime_fieldContext extract_datetime_field() throws RecognitionException { + Extract_datetime_fieldContext _localctx = new Extract_datetime_fieldContext(_ctx, getState()); + enterRule(_localctx, 180, RULE_extract_datetime_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1237); + match(EXTRACT); + setState(1238); + match(T__1); + setState(1239); + datetime_field(); + setState(1240); + match(FROM); + setState(1241); + datetime_expression(); + setState(1242); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Datetime_fieldContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Datetime_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_datetime_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDatetime_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDatetime_field(this); + } + } + + public final Datetime_fieldContext datetime_field() throws RecognitionException { + Datetime_fieldContext _localctx = new Datetime_fieldContext(_ctx, getState()); + enterRule(_localctx, 182, RULE_datetime_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1244); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Extract_datetime_partContext extends ParserRuleContext { + public TerminalNode EXTRACT() { return getToken(JpqlParser.EXTRACT, 0); } + public Datetime_partContext datetime_part() { + return getRuleContext(Datetime_partContext.class,0); + } + public TerminalNode FROM() { return getToken(JpqlParser.FROM, 0); } + public Datetime_expressionContext datetime_expression() { + return getRuleContext(Datetime_expressionContext.class,0); + } + public Extract_datetime_partContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_extract_datetime_part; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterExtract_datetime_part(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitExtract_datetime_part(this); + } + } + + public final Extract_datetime_partContext extract_datetime_part() throws RecognitionException { + Extract_datetime_partContext _localctx = new Extract_datetime_partContext(_ctx, getState()); + enterRule(_localctx, 184, RULE_extract_datetime_part); + try { + enterOuterAlt(_localctx, 1); + { + setState(1246); + match(EXTRACT); + setState(1247); + match(T__1); + setState(1248); + datetime_part(); + setState(1249); + match(FROM); + setState(1250); + datetime_expression(); + setState(1251); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Datetime_partContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Datetime_partContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_datetime_part; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDatetime_part(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDatetime_part(this); + } + } + + public final Datetime_partContext datetime_part() throws RecognitionException { + Datetime_partContext _localctx = new Datetime_partContext(_ctx, getState()); + enterRule(_localctx, 186, RULE_datetime_part); + try { + enterOuterAlt(_localctx, 1); + { + setState(1253); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Function_argContext extends ParserRuleContext { + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public Function_argContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_function_arg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFunction_arg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFunction_arg(this); + } + } + + public final Function_argContext function_arg() throws RecognitionException { + Function_argContext _localctx = new Function_argContext(_ctx, getState()); + enterRule(_localctx, 188, RULE_function_arg); + try { + setState(1259); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1255); + literal(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1256); + state_valued_path_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1257); + input_parameter(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1258); + scalar_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Case_expressionContext extends ParserRuleContext { + public General_case_expressionContext general_case_expression() { + return getRuleContext(General_case_expressionContext.class,0); + } + public Simple_case_expressionContext simple_case_expression() { + return getRuleContext(Simple_case_expressionContext.class,0); + } + public Coalesce_expressionContext coalesce_expression() { + return getRuleContext(Coalesce_expressionContext.class,0); + } + public Nullif_expressionContext nullif_expression() { + return getRuleContext(Nullif_expressionContext.class,0); + } + public Case_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_case_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCase_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCase_expression(this); + } + } + + public final Case_expressionContext case_expression() throws RecognitionException { + Case_expressionContext _localctx = new Case_expressionContext(_ctx, getState()); + enterRule(_localctx, 190, RULE_case_expression); + try { + setState(1265); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1261); + general_case_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1262); + simple_case_expression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1263); + coalesce_expression(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1264); + nullif_expression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class General_case_expressionContext extends ParserRuleContext { + public TerminalNode CASE() { return getToken(JpqlParser.CASE, 0); } + public List when_clause() { + return getRuleContexts(When_clauseContext.class); + } + public When_clauseContext when_clause(int i) { + return getRuleContext(When_clauseContext.class,i); + } + public TerminalNode ELSE() { return getToken(JpqlParser.ELSE, 0); } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public TerminalNode END() { return getToken(JpqlParser.END, 0); } + public General_case_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_general_case_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterGeneral_case_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitGeneral_case_expression(this); + } + } + + public final General_case_expressionContext general_case_expression() throws RecognitionException { + General_case_expressionContext _localctx = new General_case_expressionContext(_ctx, getState()); + enterRule(_localctx, 192, RULE_general_case_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1267); + match(CASE); + setState(1268); + when_clause(); + setState(1272); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==WHEN) { + { + { + setState(1269); + when_clause(); + } + } + setState(1274); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1275); + match(ELSE); + setState(1276); + scalar_expression(); + setState(1277); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class When_clauseContext extends ParserRuleContext { + public TerminalNode WHEN() { return getToken(JpqlParser.WHEN, 0); } + public Conditional_expressionContext conditional_expression() { + return getRuleContext(Conditional_expressionContext.class,0); + } + public TerminalNode THEN() { return getToken(JpqlParser.THEN, 0); } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public When_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_when_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterWhen_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitWhen_clause(this); + } + } + + public final When_clauseContext when_clause() throws RecognitionException { + When_clauseContext _localctx = new When_clauseContext(_ctx, getState()); + enterRule(_localctx, 194, RULE_when_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1279); + match(WHEN); + setState(1280); + conditional_expression(0); + setState(1281); + match(THEN); + setState(1282); + scalar_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_case_expressionContext extends ParserRuleContext { + public TerminalNode CASE() { return getToken(JpqlParser.CASE, 0); } + public Case_operandContext case_operand() { + return getRuleContext(Case_operandContext.class,0); + } + public List simple_when_clause() { + return getRuleContexts(Simple_when_clauseContext.class); + } + public Simple_when_clauseContext simple_when_clause(int i) { + return getRuleContext(Simple_when_clauseContext.class,i); + } + public TerminalNode ELSE() { return getToken(JpqlParser.ELSE, 0); } + public Scalar_expressionContext scalar_expression() { + return getRuleContext(Scalar_expressionContext.class,0); + } + public TerminalNode END() { return getToken(JpqlParser.END, 0); } + public Simple_case_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_case_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_case_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_case_expression(this); + } + } + + public final Simple_case_expressionContext simple_case_expression() throws RecognitionException { + Simple_case_expressionContext _localctx = new Simple_case_expressionContext(_ctx, getState()); + enterRule(_localctx, 196, RULE_simple_case_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1284); + match(CASE); + setState(1285); + case_operand(); + setState(1286); + simple_when_clause(); + setState(1290); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==WHEN) { + { + { + setState(1287); + simple_when_clause(); + } + } + setState(1292); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1293); + match(ELSE); + setState(1294); + scalar_expression(); + setState(1295); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Case_operandContext extends ParserRuleContext { + public State_valued_path_expressionContext state_valued_path_expression() { + return getRuleContext(State_valued_path_expressionContext.class,0); + } + public Type_discriminatorContext type_discriminator() { + return getRuleContext(Type_discriminatorContext.class,0); + } + public Case_operandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_case_operand; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCase_operand(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCase_operand(this); + } + } + + public final Case_operandContext case_operand() throws RecognitionException { + Case_operandContext _localctx = new Case_operandContext(_ctx, getState()); + enterRule(_localctx, 198, RULE_case_operand); + try { + setState(1299); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1297); + state_valued_path_expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1298); + type_discriminator(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Simple_when_clauseContext extends ParserRuleContext { + public TerminalNode WHEN() { return getToken(JpqlParser.WHEN, 0); } + public List scalar_expression() { + return getRuleContexts(Scalar_expressionContext.class); + } + public Scalar_expressionContext scalar_expression(int i) { + return getRuleContext(Scalar_expressionContext.class,i); + } + public TerminalNode THEN() { return getToken(JpqlParser.THEN, 0); } + public Simple_when_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simple_when_clause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSimple_when_clause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSimple_when_clause(this); + } + } + + public final Simple_when_clauseContext simple_when_clause() throws RecognitionException { + Simple_when_clauseContext _localctx = new Simple_when_clauseContext(_ctx, getState()); + enterRule(_localctx, 200, RULE_simple_when_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1301); + match(WHEN); + setState(1302); + scalar_expression(); + setState(1303); + match(THEN); + setState(1304); + scalar_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Coalesce_expressionContext extends ParserRuleContext { + public TerminalNode COALESCE() { return getToken(JpqlParser.COALESCE, 0); } + public List scalar_expression() { + return getRuleContexts(Scalar_expressionContext.class); + } + public Scalar_expressionContext scalar_expression(int i) { + return getRuleContext(Scalar_expressionContext.class,i); + } + public Coalesce_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_coalesce_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCoalesce_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCoalesce_expression(this); + } + } + + public final Coalesce_expressionContext coalesce_expression() throws RecognitionException { + Coalesce_expressionContext _localctx = new Coalesce_expressionContext(_ctx, getState()); + enterRule(_localctx, 202, RULE_coalesce_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1306); + match(COALESCE); + setState(1307); + match(T__1); + setState(1308); + scalar_expression(); + setState(1311); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1309); + match(T__0); + setState(1310); + scalar_expression(); + } + } + setState(1313); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T__0 ); + setState(1315); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Nullif_expressionContext extends ParserRuleContext { + public TerminalNode NULLIF() { return getToken(JpqlParser.NULLIF, 0); } + public List scalar_expression() { + return getRuleContexts(Scalar_expressionContext.class); + } + public Scalar_expressionContext scalar_expression(int i) { + return getRuleContext(Scalar_expressionContext.class,i); + } + public Nullif_expressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nullif_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterNullif_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitNullif_expression(this); + } + } + + public final Nullif_expressionContext nullif_expression() throws RecognitionException { + Nullif_expressionContext _localctx = new Nullif_expressionContext(_ctx, getState()); + enterRule(_localctx, 204, RULE_nullif_expression); + try { + enterOuterAlt(_localctx, 1); + { + setState(1317); + match(NULLIF); + setState(1318); + match(T__1); + setState(1319); + scalar_expression(); + setState(1320); + match(T__0); + setState(1321); + scalar_expression(); + setState(1322); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Trim_characterContext extends ParserRuleContext { + public TerminalNode CHARACTER() { return getToken(JpqlParser.CHARACTER, 0); } + public Character_valued_input_parameterContext character_valued_input_parameter() { + return getRuleContext(Character_valued_input_parameterContext.class,0); + } + public Trim_characterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_trim_character; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterTrim_character(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitTrim_character(this); + } + } + + public final Trim_characterContext trim_character() throws RecognitionException { + Trim_characterContext _localctx = new Trim_characterContext(_ctx, getState()); + enterRule(_localctx, 206, RULE_trim_character); + try { + setState(1326); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1324); + match(CHARACTER); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1325); + character_valued_input_parameter(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Identification_variableContext extends ParserRuleContext { + public Token f; + public TerminalNode IDENTIFICATION_VARIABLE() { return getToken(JpqlParser.IDENTIFICATION_VARIABLE, 0); } + public TerminalNode COUNT() { return getToken(JpqlParser.COUNT, 0); } + public TerminalNode DATE() { return getToken(JpqlParser.DATE, 0); } + public TerminalNode INNER() { return getToken(JpqlParser.INNER, 0); } + public TerminalNode KEY() { return getToken(JpqlParser.KEY, 0); } + public TerminalNode LEFT() { return getToken(JpqlParser.LEFT, 0); } + public TerminalNode NEW() { return getToken(JpqlParser.NEW, 0); } + public TerminalNode ORDER() { return getToken(JpqlParser.ORDER, 0); } + public TerminalNode OUTER() { return getToken(JpqlParser.OUTER, 0); } + public TerminalNode POWER() { return getToken(JpqlParser.POWER, 0); } + public TerminalNode FLOOR() { return getToken(JpqlParser.FLOOR, 0); } + public TerminalNode SIGN() { return getToken(JpqlParser.SIGN, 0); } + public TerminalNode TIME() { return getToken(JpqlParser.TIME, 0); } + public TerminalNode TYPE() { return getToken(JpqlParser.TYPE, 0); } + public TerminalNode VALUE() { return getToken(JpqlParser.VALUE, 0); } + public Identification_variableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identification_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterIdentification_variable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitIdentification_variable(this); + } + } + + public final Identification_variableContext identification_variable() throws RecognitionException { + Identification_variableContext _localctx = new Identification_variableContext(_ctx, getState()); + enterRule(_localctx, 208, RULE_identification_variable); + int _la; + try { + setState(1330); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 1); + { + setState(1328); + match(IDENTIFICATION_VARIABLE); + } + break; + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TYPE: + case VALUE: + enterOuterAlt(_localctx, 2); + { + setState(1329); + ((Identification_variableContext)_localctx).f = _input.LT(1); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 5909848647524155392L) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & 606095105L) != 0)) ) { + ((Identification_variableContext)_localctx).f = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Constructor_nameContext extends ParserRuleContext { + public State_field_path_expressionContext state_field_path_expression() { + return getRuleContext(State_field_path_expressionContext.class,0); + } + public Constructor_nameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constructor_name; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterConstructor_name(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitConstructor_name(this); + } + } + + public final Constructor_nameContext constructor_name() throws RecognitionException { + Constructor_nameContext _localctx = new Constructor_nameContext(_ctx, getState()); + enterRule(_localctx, 210, RULE_constructor_name); + try { + enterOuterAlt(_localctx, 1); + { + setState(1332); + state_field_path_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralContext extends ParserRuleContext { + public TerminalNode STRINGLITERAL() { return getToken(JpqlParser.STRINGLITERAL, 0); } + public TerminalNode JAVASTRINGLITERAL() { return getToken(JpqlParser.JAVASTRINGLITERAL, 0); } + public TerminalNode INTLITERAL() { return getToken(JpqlParser.INTLITERAL, 0); } + public TerminalNode FLOATLITERAL() { return getToken(JpqlParser.FLOATLITERAL, 0); } + public TerminalNode LONGLITERAL() { return getToken(JpqlParser.LONGLITERAL, 0); } + public Boolean_literalContext boolean_literal() { + return getRuleContext(Boolean_literalContext.class,0); + } + public Entity_type_literalContext entity_type_literal() { + return getRuleContext(Entity_type_literalContext.class,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 JpqlListener ) ((JpqlListener)listener).enterLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitLiteral(this); + } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 212, RULE_literal); + try { + setState(1341); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRINGLITERAL: + enterOuterAlt(_localctx, 1); + { + setState(1334); + match(STRINGLITERAL); + } + break; + case JAVASTRINGLITERAL: + enterOuterAlt(_localctx, 2); + { + setState(1335); + match(JAVASTRINGLITERAL); + } + break; + case INTLITERAL: + enterOuterAlt(_localctx, 3); + { + setState(1336); + match(INTLITERAL); + } + break; + case FLOATLITERAL: + enterOuterAlt(_localctx, 4); + { + setState(1337); + match(FLOATLITERAL); + } + break; + case LONGLITERAL: + enterOuterAlt(_localctx, 5); + { + setState(1338); + match(LONGLITERAL); + } + break; + case FALSE: + case TRUE: + enterOuterAlt(_localctx, 6); + { + setState(1339); + boolean_literal(); + } + break; + case COUNT: + case DATE: + case FLOOR: + case INNER: + case KEY: + case LEFT: + case NEW: + case ORDER: + case OUTER: + case POWER: + case SIGN: + case TIME: + case TYPE: + case VALUE: + case IDENTIFICATION_VARIABLE: + enterOuterAlt(_localctx, 7); + { + setState(1340); + entity_type_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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Input_parameterContext extends ParserRuleContext { + public TerminalNode SPEL() { return getToken(JpqlParser.SPEL, 0); } + public TerminalNode INTLITERAL() { return getToken(JpqlParser.INTLITERAL, 0); } + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Input_parameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_input_parameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterInput_parameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitInput_parameter(this); + } + } + + public final Input_parameterContext input_parameter() throws RecognitionException { + Input_parameterContext _localctx = new Input_parameterContext(_ctx, getState()); + enterRule(_localctx, 214, RULE_input_parameter); + try { + setState(1354); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,135,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1343); + match(T__12); + setState(1344); + match(SPEL); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1345); + match(T__13); + setState(1346); + match(SPEL); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1347); + match(T__13); + setState(1348); + match(INTLITERAL); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1349); + match(T__12); + setState(1350); + identification_variable(); + setState(1352); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) { + case 1: + { + setState(1351); + match(T__14); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Pattern_valueContext extends ParserRuleContext { + public String_expressionContext string_expression() { + return getRuleContext(String_expressionContext.class,0); + } + public Pattern_valueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pattern_value; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterPattern_value(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitPattern_value(this); + } + } + + public final Pattern_valueContext pattern_value() throws RecognitionException { + Pattern_valueContext _localctx = new Pattern_valueContext(_ctx, getState()); + enterRule(_localctx, 216, RULE_pattern_value); + try { + enterOuterAlt(_localctx, 1); + { + setState(1356); + string_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Date_time_timestamp_literalContext extends ParserRuleContext { + public TerminalNode STRINGLITERAL() { return getToken(JpqlParser.STRINGLITERAL, 0); } + public Date_time_timestamp_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_date_time_timestamp_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterDate_time_timestamp_literal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitDate_time_timestamp_literal(this); + } + } + + public final Date_time_timestamp_literalContext date_time_timestamp_literal() throws RecognitionException { + Date_time_timestamp_literalContext _localctx = new Date_time_timestamp_literalContext(_ctx, getState()); + enterRule(_localctx, 218, RULE_date_time_timestamp_literal); + try { + enterOuterAlt(_localctx, 1); + { + setState(1358); + match(STRINGLITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Entity_type_literalContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Entity_type_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_entity_type_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEntity_type_literal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEntity_type_literal(this); + } + } + + public final Entity_type_literalContext entity_type_literal() throws RecognitionException { + Entity_type_literalContext _localctx = new Entity_type_literalContext(_ctx, getState()); + enterRule(_localctx, 220, RULE_entity_type_literal); + try { + enterOuterAlt(_localctx, 1); + { + setState(1360); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Escape_characterContext extends ParserRuleContext { + public TerminalNode CHARACTER() { return getToken(JpqlParser.CHARACTER, 0); } + public Character_valued_input_parameterContext character_valued_input_parameter() { + return getRuleContext(Character_valued_input_parameterContext.class,0); + } + public Escape_characterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_escape_character; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEscape_character(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEscape_character(this); + } + } + + public final Escape_characterContext escape_character() throws RecognitionException { + Escape_characterContext _localctx = new Escape_characterContext(_ctx, getState()); + enterRule(_localctx, 222, RULE_escape_character); + try { + setState(1364); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,136,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1362); + match(CHARACTER); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1363); + character_valued_input_parameter(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Numeric_literalContext extends ParserRuleContext { + public TerminalNode INTLITERAL() { return getToken(JpqlParser.INTLITERAL, 0); } + public TerminalNode FLOATLITERAL() { return getToken(JpqlParser.FLOATLITERAL, 0); } + public TerminalNode LONGLITERAL() { return getToken(JpqlParser.LONGLITERAL, 0); } + public Numeric_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_numeric_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterNumeric_literal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitNumeric_literal(this); + } + } + + public final Numeric_literalContext numeric_literal() throws RecognitionException { + Numeric_literalContext _localctx = new Numeric_literalContext(_ctx, getState()); + enterRule(_localctx, 224, RULE_numeric_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1366); + _la = _input.LA(1); + if ( !(((((_la - 111)) & ~0x3f) == 0 && ((1L << (_la - 111)) & 7L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Boolean_literalContext extends ParserRuleContext { + public TerminalNode TRUE() { return getToken(JpqlParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(JpqlParser.FALSE, 0); } + public Boolean_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolean_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterBoolean_literal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitBoolean_literal(this); + } + } + + public final Boolean_literalContext boolean_literal() throws RecognitionException { + Boolean_literalContext _localctx = new Boolean_literalContext(_ctx, getState()); + enterRule(_localctx, 226, RULE_boolean_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1368); + _la = _input.LA(1); + if ( !(_la==FALSE || _la==TRUE) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Enum_literalContext extends ParserRuleContext { + public State_field_path_expressionContext state_field_path_expression() { + return getRuleContext(State_field_path_expressionContext.class,0); + } + public Enum_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enum_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEnum_literal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEnum_literal(this); + } + } + + public final Enum_literalContext enum_literal() throws RecognitionException { + Enum_literalContext _localctx = new Enum_literalContext(_ctx, getState()); + enterRule(_localctx, 228, RULE_enum_literal); + try { + enterOuterAlt(_localctx, 1); + { + setState(1370); + state_field_path_expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class String_literalContext extends ParserRuleContext { + public TerminalNode CHARACTER() { return getToken(JpqlParser.CHARACTER, 0); } + public TerminalNode STRINGLITERAL() { return getToken(JpqlParser.STRINGLITERAL, 0); } + public String_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_string_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterString_literal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitString_literal(this); + } + } + + public final String_literalContext string_literal() throws RecognitionException { + String_literalContext _localctx = new String_literalContext(_ctx, getState()); + enterRule(_localctx, 230, RULE_string_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1372); + _la = _input.LA(1); + if ( !(_la==CHARACTER || _la==STRINGLITERAL) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Single_valued_embeddable_object_fieldContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Single_valued_embeddable_object_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_single_valued_embeddable_object_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSingle_valued_embeddable_object_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSingle_valued_embeddable_object_field(this); + } + } + + public final Single_valued_embeddable_object_fieldContext single_valued_embeddable_object_field() throws RecognitionException { + Single_valued_embeddable_object_fieldContext _localctx = new Single_valued_embeddable_object_fieldContext(_ctx, getState()); + enterRule(_localctx, 232, RULE_single_valued_embeddable_object_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1374); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SubtypeContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public SubtypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subtype; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSubtype(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSubtype(this); + } + } + + public final SubtypeContext subtype() throws RecognitionException { + SubtypeContext _localctx = new SubtypeContext(_ctx, getState()); + enterRule(_localctx, 234, RULE_subtype); + try { + enterOuterAlt(_localctx, 1); + { + setState(1376); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Collection_valued_fieldContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Collection_valued_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collection_valued_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCollection_valued_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCollection_valued_field(this); + } + } + + public final Collection_valued_fieldContext collection_valued_field() throws RecognitionException { + Collection_valued_fieldContext _localctx = new Collection_valued_fieldContext(_ctx, getState()); + enterRule(_localctx, 236, RULE_collection_valued_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1378); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Single_valued_object_fieldContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Single_valued_object_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_single_valued_object_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSingle_valued_object_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSingle_valued_object_field(this); + } + } + + public final Single_valued_object_fieldContext single_valued_object_field() throws RecognitionException { + Single_valued_object_fieldContext _localctx = new Single_valued_object_fieldContext(_ctx, getState()); + enterRule(_localctx, 238, RULE_single_valued_object_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1380); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class State_fieldContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public State_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_state_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterState_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitState_field(this); + } + } + + public final State_fieldContext state_field() throws RecognitionException { + State_fieldContext _localctx = new State_fieldContext(_ctx, getState()); + enterRule(_localctx, 240, RULE_state_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1382); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Collection_value_fieldContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Collection_value_fieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collection_value_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCollection_value_field(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCollection_value_field(this); + } + } + + public final Collection_value_fieldContext collection_value_field() throws RecognitionException { + Collection_value_fieldContext _localctx = new Collection_value_fieldContext(_ctx, getState()); + enterRule(_localctx, 242, RULE_collection_value_field); + try { + enterOuterAlt(_localctx, 1); + { + setState(1384); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Entity_nameContext extends ParserRuleContext { + public List identification_variable() { + return getRuleContexts(Identification_variableContext.class); + } + public Identification_variableContext identification_variable(int i) { + return getRuleContext(Identification_variableContext.class,i); + } + public Entity_nameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_entity_name; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterEntity_name(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitEntity_name(this); + } + } + + public final Entity_nameContext entity_name() throws RecognitionException { + Entity_nameContext _localctx = new Entity_nameContext(_ctx, getState()); + enterRule(_localctx, 244, RULE_entity_name); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1386); + identification_variable(); + setState(1391); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1387); + match(T__3); + setState(1388); + identification_variable(); + } + } + setState(1393); + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class Result_variableContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Result_variableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_result_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterResult_variable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitResult_variable(this); + } + } + + public final Result_variableContext result_variable() throws RecognitionException { + Result_variableContext _localctx = new Result_variableContext(_ctx, getState()); + enterRule(_localctx, 246, RULE_result_variable); + try { + enterOuterAlt(_localctx, 1); + { + setState(1394); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Superquery_identification_variableContext extends ParserRuleContext { + public Identification_variableContext identification_variable() { + return getRuleContext(Identification_variableContext.class,0); + } + public Superquery_identification_variableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_superquery_identification_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSuperquery_identification_variable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSuperquery_identification_variable(this); + } + } + + public final Superquery_identification_variableContext superquery_identification_variable() throws RecognitionException { + Superquery_identification_variableContext _localctx = new Superquery_identification_variableContext(_ctx, getState()); + enterRule(_localctx, 248, RULE_superquery_identification_variable); + try { + enterOuterAlt(_localctx, 1); + { + setState(1396); + identification_variable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Collection_valued_input_parameterContext extends ParserRuleContext { + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Collection_valued_input_parameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collection_valued_input_parameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCollection_valued_input_parameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCollection_valued_input_parameter(this); + } + } + + public final Collection_valued_input_parameterContext collection_valued_input_parameter() throws RecognitionException { + Collection_valued_input_parameterContext _localctx = new Collection_valued_input_parameterContext(_ctx, getState()); + enterRule(_localctx, 250, RULE_collection_valued_input_parameter); + try { + enterOuterAlt(_localctx, 1); + { + setState(1398); + input_parameter(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Single_valued_input_parameterContext extends ParserRuleContext { + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Single_valued_input_parameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_single_valued_input_parameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterSingle_valued_input_parameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitSingle_valued_input_parameter(this); + } + } + + public final Single_valued_input_parameterContext single_valued_input_parameter() throws RecognitionException { + Single_valued_input_parameterContext _localctx = new Single_valued_input_parameterContext(_ctx, getState()); + enterRule(_localctx, 252, RULE_single_valued_input_parameter); + try { + enterOuterAlt(_localctx, 1); + { + setState(1400); + input_parameter(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Function_nameContext extends ParserRuleContext { + public String_literalContext string_literal() { + return getRuleContext(String_literalContext.class,0); + } + public Function_nameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_function_name; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterFunction_name(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitFunction_name(this); + } + } + + public final Function_nameContext function_name() throws RecognitionException { + Function_nameContext _localctx = new Function_nameContext(_ctx, getState()); + enterRule(_localctx, 254, RULE_function_name); + try { + enterOuterAlt(_localctx, 1); + { + setState(1402); + string_literal(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Character_valued_input_parameterContext extends ParserRuleContext { + public TerminalNode CHARACTER() { return getToken(JpqlParser.CHARACTER, 0); } + public Input_parameterContext input_parameter() { + return getRuleContext(Input_parameterContext.class,0); + } + public Character_valued_input_parameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_character_valued_input_parameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).enterCharacter_valued_input_parameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof JpqlListener ) ((JpqlListener)listener).exitCharacter_valued_input_parameter(this); + } + } + + public final Character_valued_input_parameterContext character_valued_input_parameter() throws RecognitionException { + Character_valued_input_parameterContext _localctx = new Character_valued_input_parameterContext(_ctx, getState()); + enterRule(_localctx, 256, RULE_character_valued_input_parameter); + try { + setState(1406); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHARACTER: + enterOuterAlt(_localctx, 1); + { + setState(1404); + match(CHARACTER); + } + break; + case T__12: + case T__13: + enterOuterAlt(_localctx, 2); + { + setState(1405); + input_parameter(); + } + 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 boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 55: + return conditional_expression_sempred((Conditional_expressionContext)_localctx, predIndex); + case 56: + return conditional_term_sempred((Conditional_termContext)_localctx, predIndex); + case 73: + return arithmetic_expression_sempred((Arithmetic_expressionContext)_localctx, predIndex); + case 74: + return arithmetic_term_sempred((Arithmetic_termContext)_localctx, predIndex); + } + return true; + } + private boolean conditional_expression_sempred(Conditional_expressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 1); + } + return true; + } + private boolean conditional_term_sempred(Conditional_termContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 1); + } + return true; + } + private boolean arithmetic_expression_sempred(Arithmetic_expressionContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 1); + } + return true; + } + private boolean arithmetic_term_sempred(Arithmetic_termContext _localctx, int predIndex) { + switch (predIndex) { + case 3: + return precpred(_ctx, 1); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001r\u0581\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\u00070\u00021\u00071\u0002"+ + "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ + "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ + "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ + "A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+ + "F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+ + "K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+ + "P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+ + "U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+ + "Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+ + "_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002"+ + "d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002"+ + "i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002"+ + "n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002"+ + "s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002"+ + "x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007{\u0002|\u0007|\u0002"+ + "}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002\u0080\u0007\u0080"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u0109\b\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002"+ + "\u010e\b\u0002\u0001\u0002\u0003\u0002\u0111\b\u0002\u0001\u0002\u0003"+ + "\u0002\u0114\b\u0002\u0001\u0002\u0003\u0002\u0117\b\u0002\u0001\u0003"+ + "\u0001\u0003\u0003\u0003\u011b\b\u0003\u0001\u0004\u0001\u0004\u0003\u0004"+ + "\u011f\b\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0005\u0005"+ + "\u0125\b\u0005\n\u0005\f\u0005\u0128\t\u0005\u0001\u0006\u0001\u0006\u0003"+ + "\u0006\u012c\b\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007\u0131"+ + "\b\u0007\n\u0007\f\u0007\u0134\t\u0007\u0001\b\u0001\b\u0003\b\u0138\b"+ + "\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0003\t\u013f\b\t\u0001\t\u0001"+ + "\t\u0003\t\u0143\b\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u0149\b\t"+ + "\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0003\u000b\u0151"+ + "\b\u000b\u0001\u000b\u0003\u000b\u0154\b\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\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0003\r\u016b\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0005\u000e\u0172\b\u000e\n\u000e\f\u000e\u0175\t\u000e"+ + "\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0005\u000f\u017e\b\u000f\n\u000f\f\u000f\u0181\t\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0003\u0010\u018a\b\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0003\u0011\u0194"+ + "\b\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u01a0"+ + "\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u01ac"+ + "\b\u0013\u0001\u0014\u0001\u0014\u0003\u0014\u01b0\b\u0014\u0001\u0015"+ + "\u0001\u0015\u0001\u0015\u0001\u0015\u0005\u0015\u01b6\b\u0015\n\u0015"+ + "\f\u0015\u01b9\t\u0015\u0003\u0015\u01bb\b\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0005\u0016\u01c1\b\u0016\n\u0016\f\u0016\u01c4"+ + "\t\u0016\u0003\u0016\u01c6\b\u0016\u0001\u0017\u0001\u0017\u0001\u0017"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0003\u0019\u01d5\b\u0019"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u01e2\b\u001c\u0001\u001c\u0003\u001c\u01e5\b\u001c\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u01eb\b\u001c\n\u001c\f\u001c"+ + "\u01ee\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u01f3\b"+ + "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u01f8\b\u001d\n"+ + "\u001d\f\u001d\u01fb\t\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u01ff"+ + "\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0003\u001e\u0207\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0003\u001f\u020d\b\u001f\u0001\u001f\u0003\u001f\u0210\b\u001f"+ + "\u0001 \u0001 \u0003 \u0214\b \u0001 \u0001 \u0001 \u0005 \u0219\b \n"+ + " \f \u021c\t \u0001!\u0001!\u0003!\u0220\b!\u0001!\u0003!\u0223\b!\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0003\"\u022f\b\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0005#"+ + "\u0237\b#\n#\f#\u023a\t#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0003$\u0243\b$\u0001%\u0001%\u0001%\u0003%\u0248\b%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001%\u0003%\u0250\b%\u0001%\u0001%\u0001%\u0003%\u0255"+ + "\b%\u0001%\u0001%\u0001%\u0003%\u025a\b%\u0001&\u0001&\u0001&\u0001\'"+ + "\u0001\'\u0001\'\u0001\'\u0001\'\u0005\'\u0264\b\'\n\'\f\'\u0267\t\'\u0001"+ + "(\u0001(\u0003(\u026b\b(\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0005*\u0275\b*\n*\f*\u0278\t*\u0001+\u0001+\u0001+\u0003+\u027d"+ + "\b+\u0001+\u0003+\u0280\b+\u0001,\u0001,\u0001,\u0003,\u0285\b,\u0001"+ + ",\u0003,\u0288\b,\u0001,\u0003,\u028b\b,\u0001-\u0001-\u0001-\u0001-\u0001"+ + "-\u0003-\u0292\b-\u0005-\u0294\b-\n-\f-\u0297\t-\u0001.\u0001.\u0001."+ + "\u0003.\u029c\b.\u0001.\u0001.\u0005.\u02a0\b.\n.\f.\u02a3\t.\u0001.\u0003"+ + ".\u02a6\b.\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0003"+ + "/\u02b0\b/\u00010\u00010\u00010\u00010\u00050\u02b6\b0\n0\f0\u02b9\t0"+ + "\u00030\u02bb\b0\u00011\u00011\u00011\u00051\u02c0\b1\n1\f1\u02c3\t1\u0001"+ + "2\u00012\u00012\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u0001"+ + "3\u00013\u00013\u00053\u02d2\b3\n3\f3\u02d5\t3\u00013\u00013\u00014\u0001"+ + "4\u00034\u02db\b4\u00014\u00014\u00015\u00015\u00015\u00015\u00035\u02e3"+ + "\b5\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00036\u02ec\b6\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00057\u02f4\b7\n7\f7\u02f7\t7\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00058\u02ff\b8\n8\f8\u0302\t8\u0001"+ + "9\u00039\u0305\b9\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001:\u0003"+ + ":\u030e\b:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0003"+ + ";\u0318\b;\u0001<\u0001<\u0003<\u031c\b<\u0001<\u0001<\u0001<\u0001<\u0001"+ + "<\u0001<\u0001<\u0003<\u0325\b<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ + "<\u0001<\u0003<\u032e\b<\u0001<\u0001<\u0001<\u0001<\u0001<\u0003<\u0335"+ + "\b<\u0001=\u0001=\u0003=\u0339\b=\u0001=\u0003=\u033c\b=\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0005=\u0343\b=\n=\f=\u0346\t=\u0001=\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0003=\u034f\b=\u0001>\u0001>\u0003>\u0353"+ + "\b>\u0001?\u0001?\u0003?\u0357\b?\u0001?\u0001?\u0001?\u0001?\u0003?\u035d"+ + "\b?\u0001@\u0001@\u0003@\u0361\b@\u0001@\u0001@\u0003@\u0365\b@\u0001"+ + "@\u0001@\u0001A\u0001A\u0001A\u0003A\u036c\bA\u0001A\u0001A\u0001B\u0001"+ + "B\u0003B\u0372\bB\u0001B\u0001B\u0003B\u0376\bB\u0001B\u0001B\u0001C\u0001"+ + "C\u0001C\u0003C\u037d\bC\u0001D\u0001D\u0001D\u0003D\u0382\bD\u0001E\u0003"+ + "E\u0385\bE\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001F\u0001"+ + "F\u0001F\u0001G\u0001G\u0001G\u0001G\u0003G\u0395\bG\u0001G\u0001G\u0001"+ + "G\u0001G\u0003G\u039b\bG\u0001G\u0001G\u0001G\u0001G\u0003G\u03a1\bG\u0001"+ + "G\u0001G\u0001G\u0001G\u0003G\u03a7\bG\u0001G\u0001G\u0001G\u0001G\u0003"+ + "G\u03ad\bG\u0001G\u0001G\u0001G\u0001G\u0003G\u03b3\bG\u0001G\u0001G\u0001"+ + "G\u0001G\u0003G\u03b9\bG\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0003"+ + "H\u03c1\bH\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0005I\u03c9\bI\n"+ + "I\fI\u03cc\tI\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0005J\u03d4\b"+ + "J\nJ\fJ\u03d7\tJ\u0001K\u0003K\u03da\bK\u0001K\u0001K\u0001L\u0001L\u0001"+ + "L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "L\u0001L\u0001L\u0003L\u03ed\bL\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0003M\u03fa\bM\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0003N\u0407"+ + "\bN\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0003"+ + "O\u0412\bO\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0003"+ + "P\u041c\bP\u0001Q\u0001Q\u0003Q\u0420\bQ\u0001R\u0001R\u0003R\u0424\b"+ + "R\u0001S\u0001S\u0001S\u0003S\u0429\bS\u0001T\u0001T\u0001T\u0001T\u0001"+ + "T\u0003T\u0430\bT\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0003U\u0440\bU\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0003U\u0487\bU\u0001"+ + "V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0003"+ + "V\u0493\bV\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0005W\u049c"+ + "\bW\nW\fW\u049f\tW\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+ + "W\u0001W\u0003W\u04aa\bW\u0001W\u0001W\u0001W\u0001W\u0001W\u0003W\u04b1"+ + "\bW\u0001W\u0003W\u04b4\bW\u0001W\u0003W\u04b7\bW\u0001W\u0001W\u0001"+ + "W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+ + "W\u0003W\u04c6\bW\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0005"+ + "Y\u04cf\bY\nY\fY\u04d2\tY\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001Z\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\"+ + "\u0001\\\u0001\\\u0001]\u0001]\u0001^\u0001^\u0001^\u0001^\u0003^\u04ec"+ + "\b^\u0001_\u0001_\u0001_\u0001_\u0003_\u04f2\b_\u0001`\u0001`\u0001`\u0005"+ + "`\u04f7\b`\n`\f`\u04fa\t`\u0001`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001"+ + "a\u0001a\u0001a\u0001b\u0001b\u0001b\u0001b\u0005b\u0509\bb\nb\fb\u050c"+ + "\tb\u0001b\u0001b\u0001b\u0001b\u0001c\u0001c\u0003c\u0514\bc\u0001d\u0001"+ + "d\u0001d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0004e\u0520"+ + "\be\u000be\fe\u0521\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001f\u0001"+ + "f\u0001f\u0001g\u0001g\u0003g\u052f\bg\u0001h\u0001h\u0003h\u0533\bh\u0001"+ + "i\u0001i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0003j\u053e"+ + "\bj\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0003"+ + "k\u0549\bk\u0003k\u054b\bk\u0001l\u0001l\u0001m\u0001m\u0001n\u0001n\u0001"+ + "o\u0001o\u0003o\u0555\bo\u0001p\u0001p\u0001q\u0001q\u0001r\u0001r\u0001"+ + "s\u0001s\u0001t\u0001t\u0001u\u0001u\u0001v\u0001v\u0001w\u0001w\u0001"+ + "x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001z\u0005z\u056e\bz\nz\fz\u0571"+ + "\tz\u0001{\u0001{\u0001|\u0001|\u0001}\u0001}\u0001~\u0001~\u0001\u007f"+ + "\u0001\u007f\u0001\u0080\u0001\u0080\u0003\u0080\u057f\b\u0080\u0001\u0080"+ + "\u0000\u0004np\u0092\u0094\u0081\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010"+ + "\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPR"+ + "TVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e"+ + "\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6"+ + "\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be"+ + "\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6"+ + "\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee"+ + "\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0000\u000b\u0004"+ + "\u0000\u0017\u0017EEGG\\\\\u0002\u0000\u0016\u0016&&\u0003\u0000\u0012"+ + "\u0012\u0014\u0014YY\u0001\u0000ij\u0001\u0000\t\n\u0001\u0000\u000b\f"+ + "\u0003\u0000\u0019\u0019==__\f\u0000\u001f\u001f##2299<<>>IIQSWW^^ccf"+ + "f\u0001\u0000oq\u0002\u000000bb\u0002\u0000kkmm\u05f2\u0000\u0102\u0001"+ + "\u0000\u0000\u0000\u0002\u0108\u0001\u0000\u0000\u0000\u0004\u010a\u0001"+ + "\u0000\u0000\u0000\u0006\u0118\u0001\u0000\u0000\u0000\b\u011c\u0001\u0000"+ + "\u0000\u0000\n\u0120\u0001\u0000\u0000\u0000\f\u012b\u0001\u0000\u0000"+ + "\u0000\u000e\u012d\u0001\u0000\u0000\u0000\u0010\u0135\u0001\u0000\u0000"+ + "\u0000\u0012\u0148\u0001\u0000\u0000\u0000\u0014\u014a\u0001\u0000\u0000"+ + "\u0000\u0016\u0153\u0001\u0000\u0000\u0000\u0018\u0157\u0001\u0000\u0000"+ + "\u0000\u001a\u016a\u0001\u0000\u0000\u0000\u001c\u016c\u0001\u0000\u0000"+ + "\u0000\u001e\u0178\u0001\u0000\u0000\u0000 \u0184\u0001\u0000\u0000\u0000"+ + "\"\u0193\u0001\u0000\u0000\u0000$\u019f\u0001\u0000\u0000\u0000&\u01ab"+ + "\u0001\u0000\u0000\u0000(\u01af\u0001\u0000\u0000\u0000*\u01ba\u0001\u0000"+ + "\u0000\u0000,\u01c5\u0001\u0000\u0000\u0000.\u01c7\u0001\u0000\u0000\u0000"+ + "0\u01ce\u0001\u0000\u0000\u00002\u01d4\u0001\u0000\u0000\u00004\u01d6"+ + "\u0001\u0000\u0000\u00006\u01da\u0001\u0000\u0000\u00008\u01de\u0001\u0000"+ + "\u0000\u0000:\u01f2\u0001\u0000\u0000\u0000<\u0206\u0001\u0000\u0000\u0000"+ + ">\u0208\u0001\u0000\u0000\u0000@\u0211\u0001\u0000\u0000\u0000B\u021d"+ + "\u0001\u0000\u0000\u0000D\u022e\u0001\u0000\u0000\u0000F\u0230\u0001\u0000"+ + "\u0000\u0000H\u0242\u0001\u0000\u0000\u0000J\u0259\u0001\u0000\u0000\u0000"+ + "L\u025b\u0001\u0000\u0000\u0000N\u025e\u0001\u0000\u0000\u0000P\u026a"+ + "\u0001\u0000\u0000\u0000R\u026c\u0001\u0000\u0000\u0000T\u026f\u0001\u0000"+ + "\u0000\u0000V\u027c\u0001\u0000\u0000\u0000X\u0281\u0001\u0000\u0000\u0000"+ + "Z\u028c\u0001\u0000\u0000\u0000\\\u02a5\u0001\u0000\u0000\u0000^\u02af"+ + "\u0001\u0000\u0000\u0000`\u02ba\u0001\u0000\u0000\u0000b\u02bc\u0001\u0000"+ + "\u0000\u0000d\u02c4\u0001\u0000\u0000\u0000f\u02cb\u0001\u0000\u0000\u0000"+ + "h\u02d8\u0001\u0000\u0000\u0000j\u02e2\u0001\u0000\u0000\u0000l\u02eb"+ + "\u0001\u0000\u0000\u0000n\u02ed\u0001\u0000\u0000\u0000p\u02f8\u0001\u0000"+ + "\u0000\u0000r\u0304\u0001\u0000\u0000\u0000t\u030d\u0001\u0000\u0000\u0000"+ + "v\u0317\u0001\u0000\u0000\u0000x\u0334\u0001\u0000\u0000\u0000z\u0338"+ + "\u0001\u0000\u0000\u0000|\u0352\u0001\u0000\u0000\u0000~\u0354\u0001\u0000"+ + "\u0000\u0000\u0080\u0360\u0001\u0000\u0000\u0000\u0082\u0368\u0001\u0000"+ + "\u0000\u0000\u0084\u036f\u0001\u0000\u0000\u0000\u0086\u037c\u0001\u0000"+ + "\u0000\u0000\u0088\u0381\u0001\u0000\u0000\u0000\u008a\u0384\u0001\u0000"+ + "\u0000\u0000\u008c\u038b\u0001\u0000\u0000\u0000\u008e\u03b8\u0001\u0000"+ + "\u0000\u0000\u0090\u03c0\u0001\u0000\u0000\u0000\u0092\u03c2\u0001\u0000"+ + "\u0000\u0000\u0094\u03cd\u0001\u0000\u0000\u0000\u0096\u03d9\u0001\u0000"+ + "\u0000\u0000\u0098\u03ec\u0001\u0000\u0000\u0000\u009a\u03f9\u0001\u0000"+ + "\u0000\u0000\u009c\u0406\u0001\u0000\u0000\u0000\u009e\u0411\u0001\u0000"+ + "\u0000\u0000\u00a0\u041b\u0001\u0000\u0000\u0000\u00a2\u041f\u0001\u0000"+ + "\u0000\u0000\u00a4\u0423\u0001\u0000\u0000\u0000\u00a6\u0428\u0001\u0000"+ + "\u0000\u0000\u00a8\u042a\u0001\u0000\u0000\u0000\u00aa\u0486\u0001\u0000"+ + "\u0000\u0000\u00ac\u0492\u0001\u0000\u0000\u0000\u00ae\u04c5\u0001\u0000"+ + "\u0000\u0000\u00b0\u04c7\u0001\u0000\u0000\u0000\u00b2\u04c9\u0001\u0000"+ + "\u0000\u0000\u00b4\u04d5\u0001\u0000\u0000\u0000\u00b6\u04dc\u0001\u0000"+ + "\u0000\u0000\u00b8\u04de\u0001\u0000\u0000\u0000\u00ba\u04e5\u0001\u0000"+ + "\u0000\u0000\u00bc\u04eb\u0001\u0000\u0000\u0000\u00be\u04f1\u0001\u0000"+ + "\u0000\u0000\u00c0\u04f3\u0001\u0000\u0000\u0000\u00c2\u04ff\u0001\u0000"+ + "\u0000\u0000\u00c4\u0504\u0001\u0000\u0000\u0000\u00c6\u0513\u0001\u0000"+ + "\u0000\u0000\u00c8\u0515\u0001\u0000\u0000\u0000\u00ca\u051a\u0001\u0000"+ + "\u0000\u0000\u00cc\u0525\u0001\u0000\u0000\u0000\u00ce\u052e\u0001\u0000"+ + "\u0000\u0000\u00d0\u0532\u0001\u0000\u0000\u0000\u00d2\u0534\u0001\u0000"+ + "\u0000\u0000\u00d4\u053d\u0001\u0000\u0000\u0000\u00d6\u054a\u0001\u0000"+ + "\u0000\u0000\u00d8\u054c\u0001\u0000\u0000\u0000\u00da\u054e\u0001\u0000"+ + "\u0000\u0000\u00dc\u0550\u0001\u0000\u0000\u0000\u00de\u0554\u0001\u0000"+ + "\u0000\u0000\u00e0\u0556\u0001\u0000\u0000\u0000\u00e2\u0558\u0001\u0000"+ + "\u0000\u0000\u00e4\u055a\u0001\u0000\u0000\u0000\u00e6\u055c\u0001\u0000"+ + "\u0000\u0000\u00e8\u055e\u0001\u0000\u0000\u0000\u00ea\u0560\u0001\u0000"+ + "\u0000\u0000\u00ec\u0562\u0001\u0000\u0000\u0000\u00ee\u0564\u0001\u0000"+ + "\u0000\u0000\u00f0\u0566\u0001\u0000\u0000\u0000\u00f2\u0568\u0001\u0000"+ + "\u0000\u0000\u00f4\u056a\u0001\u0000\u0000\u0000\u00f6\u0572\u0001\u0000"+ + "\u0000\u0000\u00f8\u0574\u0001\u0000\u0000\u0000\u00fa\u0576\u0001\u0000"+ + "\u0000\u0000\u00fc\u0578\u0001\u0000\u0000\u0000\u00fe\u057a\u0001\u0000"+ + "\u0000\u0000\u0100\u057e\u0001\u0000\u0000\u0000\u0102\u0103\u0003\u0002"+ + "\u0001\u0000\u0103\u0104\u0005\u0000\u0000\u0001\u0104\u0001\u0001\u0000"+ + "\u0000\u0000\u0105\u0109\u0003\u0004\u0002\u0000\u0106\u0109\u0003\u0006"+ + "\u0003\u0000\u0107\u0109\u0003\b\u0004\u0000\u0108\u0105\u0001\u0000\u0000"+ + "\u0000\u0108\u0106\u0001\u0000\u0000\u0000\u0108\u0107\u0001\u0000\u0000"+ + "\u0000\u0109\u0003\u0001\u0000\u0000\u0000\u010a\u010b\u0003@ \u0000\u010b"+ + "\u010d\u0003\n\u0005\u0000\u010c\u010e\u0003L&\u0000\u010d\u010c\u0001"+ + "\u0000\u0000\u0000\u010d\u010e\u0001\u0000\u0000\u0000\u010e\u0110\u0001"+ + "\u0000\u0000\u0000\u010f\u0111\u0003N\'\u0000\u0110\u010f\u0001\u0000"+ + "\u0000\u0000\u0110\u0111\u0001\u0000\u0000\u0000\u0111\u0113\u0001\u0000"+ + "\u0000\u0000\u0112\u0114\u0003R)\u0000\u0113\u0112\u0001\u0000\u0000\u0000"+ + "\u0113\u0114\u0001\u0000\u0000\u0000\u0114\u0116\u0001\u0000\u0000\u0000"+ + "\u0115\u0117\u0003T*\u0000\u0116\u0115\u0001\u0000\u0000\u0000\u0116\u0117"+ + "\u0001\u0000\u0000\u0000\u0117\u0005\u0001\u0000\u0000\u0000\u0118\u011a"+ + "\u00038\u001c\u0000\u0119\u011b\u0003L&\u0000\u011a\u0119\u0001\u0000"+ + "\u0000\u0000\u011a\u011b\u0001\u0000\u0000\u0000\u011b\u0007\u0001\u0000"+ + "\u0000\u0000\u011c\u011e\u0003>\u001f\u0000\u011d\u011f\u0003L&\u0000"+ + "\u011e\u011d\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000\u0000"+ + "\u011f\t\u0001\u0000\u0000\u0000\u0120\u0121\u00053\u0000\u0000\u0121"+ + "\u0126\u0003\u000e\u0007\u0000\u0122\u0123\u0005\u0001\u0000\u0000\u0123"+ + "\u0125\u0003\f\u0006\u0000\u0124\u0122\u0001\u0000\u0000\u0000\u0125\u0128"+ + "\u0001\u0000\u0000\u0000\u0126\u0124\u0001\u0000\u0000\u0000\u0126\u0127"+ + "\u0001\u0000\u0000\u0000\u0127\u000b\u0001\u0000\u0000\u0000\u0128\u0126"+ + "\u0001\u0000\u0000\u0000\u0129\u012c\u0003\u000e\u0007\u0000\u012a\u012c"+ + "\u0003 \u0010\u0000\u012b\u0129\u0001\u0000\u0000\u0000\u012b\u012a\u0001"+ + "\u0000\u0000\u0000\u012c\r\u0001\u0000\u0000\u0000\u012d\u0132\u0003\u0010"+ + "\b\u0000\u012e\u0131\u0003\u0012\t\u0000\u012f\u0131\u0003\u0014\n\u0000"+ + "\u0130\u012e\u0001\u0000\u0000\u0000\u0130\u012f\u0001\u0000\u0000\u0000"+ + "\u0131\u0134\u0001\u0000\u0000\u0000\u0132\u0130\u0001\u0000\u0000\u0000"+ + "\u0132\u0133\u0001\u0000\u0000\u0000\u0133\u000f\u0001\u0000\u0000\u0000"+ + "\u0134\u0132\u0001\u0000\u0000\u0000\u0135\u0137\u0003\u00f4z\u0000\u0136"+ + "\u0138\u0005\u0015\u0000\u0000\u0137\u0136\u0001\u0000\u0000\u0000\u0137"+ + "\u0138\u0001\u0000\u0000\u0000\u0138\u0139\u0001\u0000\u0000\u0000\u0139"+ + "\u013a\u0003\u00d0h\u0000\u013a\u0011\u0001\u0000\u0000\u0000\u013b\u013c"+ + "\u0003\u0016\u000b\u0000\u013c\u013e\u0003\u001a\r\u0000\u013d\u013f\u0005"+ + "\u0015\u0000\u0000\u013e\u013d\u0001\u0000\u0000\u0000\u013e\u013f\u0001"+ + "\u0000\u0000\u0000\u013f\u0140\u0001\u0000\u0000\u0000\u0140\u0142\u0003"+ + "\u00d0h\u0000\u0141\u0143\u0003\u0018\f\u0000\u0142\u0141\u0001\u0000"+ + "\u0000\u0000\u0142\u0143\u0001\u0000\u0000\u0000\u0143\u0149\u0001\u0000"+ + "\u0000\u0000\u0144\u0145\u0003\u0016\u000b\u0000\u0145\u0146\u0003\u001a"+ + "\r\u0000\u0146\u0147\u0003L&\u0000\u0147\u0149\u0001\u0000\u0000\u0000"+ + "\u0148\u013b\u0001\u0000\u0000\u0000\u0148\u0144\u0001\u0000\u0000\u0000"+ + "\u0149\u0013\u0001\u0000\u0000\u0000\u014a\u014b\u0003\u0016\u000b\u0000"+ + "\u014b\u014c\u00051\u0000\u0000\u014c\u014d\u0003\u001a\r\u0000\u014d"+ + "\u0015\u0001\u0000\u0000\u0000\u014e\u0150\u0005>\u0000\u0000\u014f\u0151"+ + "\u0005R\u0000\u0000\u0150\u014f\u0001\u0000\u0000\u0000\u0150\u0151\u0001"+ + "\u0000\u0000\u0000\u0151\u0154\u0001\u0000\u0000\u0000\u0152\u0154\u0005"+ + "9\u0000\u0000\u0153\u014e\u0001\u0000\u0000\u0000\u0153\u0152\u0001\u0000"+ + "\u0000\u0000\u0153\u0154\u0001\u0000\u0000\u0000\u0154\u0155\u0001\u0000"+ + "\u0000\u0000\u0155\u0156\u0005;\u0000\u0000\u0156\u0017\u0001\u0000\u0000"+ + "\u0000\u0157\u0158\u0005O\u0000\u0000\u0158\u0159\u0003n7\u0000\u0159"+ + "\u0019\u0001\u0000\u0000\u0000\u015a\u016b\u0003\u001c\u000e\u0000\u015b"+ + "\u016b\u0003\u001e\u000f\u0000\u015c\u015d\u0005`\u0000\u0000\u015d\u015e"+ + "\u0005\u0002\u0000\u0000\u015e\u015f\u0003\u001c\u000e\u0000\u015f\u0160"+ + "\u0005\u0015\u0000\u0000\u0160\u0161\u0003\u00eau\u0000\u0161\u0162\u0005"+ + "\u0003\u0000\u0000\u0162\u016b\u0001\u0000\u0000\u0000\u0163\u0164\u0005"+ + "`\u0000\u0000\u0164\u0165\u0005\u0002\u0000\u0000\u0165\u0166\u0003\u001e"+ + "\u000f\u0000\u0166\u0167\u0005\u0015\u0000\u0000\u0167\u0168\u0003\u00ea"+ + "u\u0000\u0168\u0169\u0005\u0003\u0000\u0000\u0169\u016b\u0001\u0000\u0000"+ + "\u0000\u016a\u015a\u0001\u0000\u0000\u0000\u016a\u015b\u0001\u0000\u0000"+ + "\u0000\u016a\u015c\u0001\u0000\u0000\u0000\u016a\u0163\u0001\u0000\u0000"+ + "\u0000\u016b\u001b\u0001\u0000\u0000\u0000\u016c\u016d\u0003\u00d0h\u0000"+ + "\u016d\u0173\u0005\u0004\u0000\u0000\u016e\u016f\u0003\u00e8t\u0000\u016f"+ + "\u0170\u0005\u0004\u0000\u0000\u0170\u0172\u0001\u0000\u0000\u0000\u0171"+ + "\u016e\u0001\u0000\u0000\u0000\u0172\u0175\u0001\u0000\u0000\u0000\u0173"+ + "\u0171\u0001\u0000\u0000\u0000\u0173\u0174\u0001\u0000\u0000\u0000\u0174"+ + "\u0176\u0001\u0000\u0000\u0000\u0175\u0173\u0001\u0000\u0000\u0000\u0176"+ + "\u0177\u0003\u00ecv\u0000\u0177\u001d\u0001\u0000\u0000\u0000\u0178\u0179"+ + "\u0003\u00d0h\u0000\u0179\u017f\u0005\u0004\u0000\u0000\u017a\u017b\u0003"+ + "\u00e8t\u0000\u017b\u017c\u0005\u0004\u0000\u0000\u017c\u017e\u0001\u0000"+ + "\u0000\u0000\u017d\u017a\u0001\u0000\u0000\u0000\u017e\u0181\u0001\u0000"+ + "\u0000\u0000\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000"+ + "\u0000\u0000\u0180\u0182\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000"+ + "\u0000\u0000\u0182\u0183\u0003\u00eew\u0000\u0183\u001f\u0001\u0000\u0000"+ + "\u0000\u0184\u0185\u00057\u0000\u0000\u0185\u0186\u0005\u0002\u0000\u0000"+ + "\u0186\u0187\u00036\u001b\u0000\u0187\u0189\u0005\u0003\u0000\u0000\u0188"+ + "\u018a\u0005\u0015\u0000\u0000\u0189\u0188\u0001\u0000\u0000\u0000\u0189"+ + "\u018a\u0001\u0000\u0000\u0000\u018a\u018b\u0001\u0000\u0000\u0000\u018b"+ + "\u018c\u0003\u00d0h\u0000\u018c!\u0001\u0000\u0000\u0000\u018d\u0194\u0003"+ + "$\u0012\u0000\u018e\u018f\u0005+\u0000\u0000\u018f\u0190\u0005\u0002\u0000"+ + "\u0000\u0190\u0191\u0003\u00d0h\u0000\u0191\u0192\u0005\u0003\u0000\u0000"+ + "\u0192\u0194\u0001\u0000\u0000\u0000\u0193\u018d\u0001\u0000\u0000\u0000"+ + "\u0193\u018e\u0001\u0000\u0000\u0000\u0194#\u0001\u0000\u0000\u0000\u0195"+ + "\u0196\u0005<\u0000\u0000\u0196\u0197\u0005\u0002\u0000\u0000\u0197\u0198"+ + "\u0003\u00d0h\u0000\u0198\u0199\u0005\u0003\u0000\u0000\u0199\u01a0\u0001"+ + "\u0000\u0000\u0000\u019a\u019b\u0005f\u0000\u0000\u019b\u019c\u0005\u0002"+ + "\u0000\u0000\u019c\u019d\u0003\u00d0h\u0000\u019d\u019e\u0005\u0003\u0000"+ + "\u0000\u019e\u01a0\u0001\u0000\u0000\u0000\u019f\u0195\u0001\u0000\u0000"+ + "\u0000\u019f\u019a\u0001\u0000\u0000\u0000\u01a0%\u0001\u0000\u0000\u0000"+ + "\u01a1\u01ac\u0003\"\u0011\u0000\u01a2\u01a3\u0005`\u0000\u0000\u01a3"+ + "\u01a4\u0005\u0002\u0000\u0000\u01a4\u01a5\u0003\"\u0011\u0000\u01a5\u01a6"+ + "\u0005\u0015\u0000\u0000\u01a6\u01a7\u0003\u00eau\u0000\u01a7\u01a8\u0005"+ + "\u0003\u0000\u0000\u01a8\u01ac\u0001\u0000\u0000\u0000\u01a9\u01ac\u0003"+ + "0\u0018\u0000\u01aa\u01ac\u00034\u001a\u0000\u01ab\u01a1\u0001\u0000\u0000"+ + "\u0000\u01ab\u01a2\u0001\u0000\u0000\u0000\u01ab\u01a9\u0001\u0000\u0000"+ + "\u0000\u01ab\u01aa\u0001\u0000\u0000\u0000\u01ac\'\u0001\u0000\u0000\u0000"+ + "\u01ad\u01b0\u0003\u00d0h\u0000\u01ae\u01b0\u0003$\u0012\u0000\u01af\u01ad"+ + "\u0001\u0000\u0000\u0000\u01af\u01ae\u0001\u0000\u0000\u0000\u01b0)\u0001"+ + "\u0000\u0000\u0000\u01b1\u01bb\u0003,\u0016\u0000\u01b2\u01b7\u0003.\u0017"+ + "\u0000\u01b3\u01b4\u0005\u0004\u0000\u0000\u01b4\u01b6\u0003\u00eew\u0000"+ + "\u01b5\u01b3\u0001\u0000\u0000\u0000\u01b6\u01b9\u0001\u0000\u0000\u0000"+ + "\u01b7\u01b5\u0001\u0000\u0000\u0000\u01b7\u01b8\u0001\u0000\u0000\u0000"+ + "\u01b8\u01bb\u0001\u0000\u0000\u0000\u01b9\u01b7\u0001\u0000\u0000\u0000"+ + "\u01ba\u01b1\u0001\u0000\u0000\u0000\u01ba\u01b2\u0001\u0000\u0000\u0000"+ + "\u01bb+\u0001\u0000\u0000\u0000\u01bc\u01c6\u0003(\u0014\u0000\u01bd\u01c2"+ + "\u0003(\u0014\u0000\u01be\u01bf\u0005\u0004\u0000\u0000\u01bf\u01c1\u0003"+ + "\u00eew\u0000\u01c0\u01be\u0001\u0000\u0000\u0000\u01c1\u01c4\u0001\u0000"+ + "\u0000\u0000\u01c2\u01c0\u0001\u0000\u0000\u0000\u01c2\u01c3\u0001\u0000"+ + "\u0000\u0000\u01c3\u01c6\u0001\u0000\u0000\u0000\u01c4\u01c2\u0001\u0000"+ + "\u0000\u0000\u01c5\u01bc\u0001\u0000\u0000\u0000\u01c5\u01bd\u0001\u0000"+ + "\u0000\u0000\u01c6-\u0001\u0000\u0000\u0000\u01c7\u01c8\u0005`\u0000\u0000"+ + "\u01c8\u01c9\u0005\u0002\u0000\u0000\u01c9\u01ca\u0003*\u0015\u0000\u01ca"+ + "\u01cb\u0005\u0015\u0000\u0000\u01cb\u01cc\u0003\u00eau\u0000\u01cc\u01cd"+ + "\u0005\u0003\u0000\u0000\u01cd/\u0001\u0000\u0000\u0000\u01ce\u01cf\u0003"+ + "*\u0015\u0000\u01cf\u01d0\u0005\u0004\u0000\u0000\u01d0\u01d1\u0003\u00f0"+ + "x\u0000\u01d11\u0001\u0000\u0000\u0000\u01d2\u01d5\u00030\u0018\u0000"+ + "\u01d3\u01d5\u0003(\u0014\u0000\u01d4\u01d2\u0001\u0000\u0000\u0000\u01d4"+ + "\u01d3\u0001\u0000\u0000\u0000\u01d53\u0001\u0000\u0000\u0000\u01d6\u01d7"+ + "\u0003*\u0015\u0000\u01d7\u01d8\u0005\u0004\u0000\u0000\u01d8\u01d9\u0003"+ + "\u00eew\u0000\u01d95\u0001\u0000\u0000\u0000\u01da\u01db\u0003*\u0015"+ + "\u0000\u01db\u01dc\u0005\u0004\u0000\u0000\u01dc\u01dd\u0003\u00f2y\u0000"+ + "\u01dd7\u0001\u0000\u0000\u0000\u01de\u01df\u0005d\u0000\u0000\u01df\u01e4"+ + "\u0003\u00f4z\u0000\u01e0\u01e2\u0005\u0015\u0000\u0000\u01e1\u01e0\u0001"+ + "\u0000\u0000\u0000\u01e1\u01e2\u0001\u0000\u0000\u0000\u01e2\u01e3\u0001"+ + "\u0000\u0000\u0000\u01e3\u01e5\u0003\u00d0h\u0000\u01e4\u01e1\u0001\u0000"+ + "\u0000\u0000\u01e4\u01e5\u0001\u0000\u0000\u0000\u01e5\u01e6\u0001\u0000"+ + "\u0000\u0000\u01e6\u01e7\u0005V\u0000\u0000\u01e7\u01ec\u0003:\u001d\u0000"+ + "\u01e8\u01e9\u0005\u0001\u0000\u0000\u01e9\u01eb\u0003:\u001d\u0000\u01ea"+ + "\u01e8\u0001\u0000\u0000\u0000\u01eb\u01ee\u0001\u0000\u0000\u0000\u01ec"+ + "\u01ea\u0001\u0000\u0000\u0000\u01ec\u01ed\u0001\u0000\u0000\u0000\u01ed"+ + "9\u0001\u0000\u0000\u0000\u01ee\u01ec\u0001\u0000\u0000\u0000\u01ef\u01f0"+ + "\u0003\u00d0h\u0000\u01f0\u01f1\u0005\u0004\u0000\u0000\u01f1\u01f3\u0001"+ + "\u0000\u0000\u0000\u01f2\u01ef\u0001\u0000\u0000\u0000\u01f2\u01f3\u0001"+ + "\u0000\u0000\u0000\u01f3\u01f9\u0001\u0000\u0000\u0000\u01f4\u01f5\u0003"+ + "\u00e8t\u0000\u01f5\u01f6\u0005\u0004\u0000\u0000\u01f6\u01f8\u0001\u0000"+ + "\u0000\u0000\u01f7\u01f4\u0001\u0000\u0000\u0000\u01f8\u01fb\u0001\u0000"+ + "\u0000\u0000\u01f9\u01f7\u0001\u0000\u0000\u0000\u01f9\u01fa\u0001\u0000"+ + "\u0000\u0000\u01fa\u01fe\u0001\u0000\u0000\u0000\u01fb\u01f9\u0001\u0000"+ + "\u0000\u0000\u01fc\u01ff\u0003\u00f0x\u0000\u01fd\u01ff\u0003\u00eew\u0000"+ + "\u01fe\u01fc\u0001\u0000\u0000\u0000\u01fe\u01fd\u0001\u0000\u0000\u0000"+ + "\u01ff\u0200\u0001\u0000\u0000\u0000\u0200\u0201\u0005i\u0000\u0000\u0201"+ + "\u0202\u0003<\u001e\u0000\u0202;\u0001\u0000\u0000\u0000\u0203\u0207\u0003"+ + "l6\u0000\u0204\u0207\u0003\u00a4R\u0000\u0205\u0207\u0005K\u0000\u0000"+ + "\u0206\u0203\u0001\u0000\u0000\u0000\u0206\u0204\u0001\u0000\u0000\u0000"+ + "\u0206\u0205\u0001\u0000\u0000\u0000\u0207=\u0001\u0000\u0000\u0000\u0208"+ + "\u0209\u0005%\u0000\u0000\u0209\u020a\u00053\u0000\u0000\u020a\u020f\u0003"+ + "\u00f4z\u0000\u020b\u020d\u0005\u0015\u0000\u0000\u020c\u020b\u0001\u0000"+ + "\u0000\u0000\u020c\u020d\u0001\u0000\u0000\u0000\u020d\u020e\u0001\u0000"+ + "\u0000\u0000\u020e\u0210\u0003\u00d0h\u0000\u020f\u020c\u0001\u0000\u0000"+ + "\u0000\u020f\u0210\u0001\u0000\u0000\u0000\u0210?\u0001\u0000\u0000\u0000"+ + "\u0211\u0213\u0005U\u0000\u0000\u0212\u0214\u0005\'\u0000\u0000\u0213"+ + "\u0212\u0001\u0000\u0000\u0000\u0213\u0214\u0001\u0000\u0000\u0000\u0214"+ + "\u0215\u0001\u0000\u0000\u0000\u0215\u021a\u0003B!\u0000\u0216\u0217\u0005"+ + "\u0001\u0000\u0000\u0217\u0219\u0003B!\u0000\u0218\u0216\u0001\u0000\u0000"+ + "\u0000\u0219\u021c\u0001\u0000\u0000\u0000\u021a\u0218\u0001\u0000\u0000"+ + "\u0000\u021a\u021b\u0001\u0000\u0000\u0000\u021bA\u0001\u0000\u0000\u0000"+ + "\u021c\u021a\u0001\u0000\u0000\u0000\u021d\u0222\u0003D\"\u0000\u021e"+ + "\u0220\u0005\u0015\u0000\u0000\u021f\u021e\u0001\u0000\u0000\u0000\u021f"+ + "\u0220\u0001\u0000\u0000\u0000\u0220\u0221\u0001\u0000\u0000\u0000\u0221"+ + "\u0223\u0003\u00f6{\u0000\u0222\u021f\u0001\u0000\u0000\u0000\u0222\u0223"+ + "\u0001\u0000\u0000\u0000\u0223C\u0001\u0000\u0000\u0000\u0224\u022f\u0003"+ + "&\u0013\u0000\u0225\u022f\u0003l6\u0000\u0226\u022f\u0003J%\u0000\u0227"+ + "\u022f\u0003\u00d0h\u0000\u0228\u0229\u0005M\u0000\u0000\u0229\u022a\u0005"+ + "\u0002\u0000\u0000\u022a\u022b\u0003\u00d0h\u0000\u022b\u022c\u0005\u0003"+ + "\u0000\u0000\u022c\u022f\u0001\u0000\u0000\u0000\u022d\u022f\u0003F#\u0000"+ + "\u022e\u0224\u0001\u0000\u0000\u0000\u022e\u0225\u0001\u0000\u0000\u0000"+ + "\u022e\u0226\u0001\u0000\u0000\u0000\u022e\u0227\u0001\u0000\u0000\u0000"+ + "\u022e\u0228\u0001\u0000\u0000\u0000\u022e\u022d\u0001\u0000\u0000\u0000"+ + "\u022fE\u0001\u0000\u0000\u0000\u0230\u0231\u0005I\u0000\u0000\u0231\u0232"+ + "\u0003\u00d2i\u0000\u0232\u0233\u0005\u0002\u0000\u0000\u0233\u0238\u0003"+ + "H$\u0000\u0234\u0235\u0005\u0001\u0000\u0000\u0235\u0237\u0003H$\u0000"+ + "\u0236\u0234\u0001\u0000\u0000\u0000\u0237\u023a\u0001\u0000\u0000\u0000"+ + "\u0238\u0236\u0001\u0000\u0000\u0000\u0238\u0239\u0001\u0000\u0000\u0000"+ + "\u0239\u023b\u0001\u0000\u0000\u0000\u023a\u0238\u0001\u0000\u0000\u0000"+ + "\u023b\u023c\u0005\u0003\u0000\u0000\u023cG\u0001\u0000\u0000\u0000\u023d"+ + "\u0243\u0003&\u0013\u0000\u023e\u0243\u0003l6\u0000\u023f\u0243\u0003"+ + "J%\u0000\u0240\u0243\u0003\u00d0h\u0000\u0241\u0243\u0003\u00d4j\u0000"+ + "\u0242\u023d\u0001\u0000\u0000\u0000\u0242\u023e\u0001\u0000\u0000\u0000"+ + "\u0242\u023f\u0001\u0000\u0000\u0000\u0242\u0240\u0001\u0000\u0000\u0000"+ + "\u0242\u0241\u0001\u0000\u0000\u0000\u0243I\u0001\u0000\u0000\u0000\u0244"+ + "\u0245\u0007\u0000\u0000\u0000\u0245\u0247\u0005\u0002\u0000\u0000\u0246"+ + "\u0248\u0005\'\u0000\u0000\u0247\u0246\u0001\u0000\u0000\u0000\u0247\u0248"+ + "\u0001\u0000\u0000\u0000\u0248\u0249\u0001\u0000\u0000\u0000\u0249\u024a"+ + "\u00032\u0019\u0000\u024a\u024b\u0005\u0003\u0000\u0000\u024b\u025a\u0001"+ + "\u0000\u0000\u0000\u024c\u024d\u0005\u001f\u0000\u0000\u024d\u024f\u0005"+ + "\u0002\u0000\u0000\u024e\u0250\u0005\'\u0000\u0000\u024f\u024e\u0001\u0000"+ + "\u0000\u0000\u024f\u0250\u0001\u0000\u0000\u0000\u0250\u0254\u0001\u0000"+ + "\u0000\u0000\u0251\u0255\u0003\u00d0h\u0000\u0252\u0255\u00032\u0019\u0000"+ + "\u0253\u0255\u00034\u001a\u0000\u0254\u0251\u0001\u0000\u0000\u0000\u0254"+ + "\u0252\u0001\u0000\u0000\u0000\u0254\u0253\u0001\u0000\u0000\u0000\u0255"+ + "\u0256\u0001\u0000\u0000\u0000\u0256\u0257\u0005\u0003\u0000\u0000\u0257"+ + "\u025a\u0001\u0000\u0000\u0000\u0258\u025a\u0003\u00b2Y\u0000\u0259\u0244"+ + "\u0001\u0000\u0000\u0000\u0259\u024c\u0001\u0000\u0000\u0000\u0259\u0258"+ + "\u0001\u0000\u0000\u0000\u025aK\u0001\u0000\u0000\u0000\u025b\u025c\u0005"+ + "h\u0000\u0000\u025c\u025d\u0003n7\u0000\u025dM\u0001\u0000\u0000\u0000"+ + "\u025e\u025f\u00055\u0000\u0000\u025f\u0260\u0005\u001a\u0000\u0000\u0260"+ + "\u0265\u0003P(\u0000\u0261\u0262\u0005\u0001\u0000\u0000\u0262\u0264\u0003"+ + "P(\u0000\u0263\u0261\u0001\u0000\u0000\u0000\u0264\u0267\u0001\u0000\u0000"+ + "\u0000\u0265\u0263\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000"+ + "\u0000\u0266O\u0001\u0000\u0000\u0000\u0267\u0265\u0001\u0000\u0000\u0000"+ + "\u0268\u026b\u0003&\u0013\u0000\u0269\u026b\u0003\u00d0h\u0000\u026a\u0268"+ + "\u0001\u0000\u0000\u0000\u026a\u0269\u0001\u0000\u0000\u0000\u026bQ\u0001"+ + "\u0000\u0000\u0000\u026c\u026d\u00056\u0000\u0000\u026d\u026e\u0003n7"+ + "\u0000\u026eS\u0001\u0000\u0000\u0000\u026f\u0270\u0005Q\u0000\u0000\u0270"+ + "\u0271\u0005\u001a\u0000\u0000\u0271\u0276\u0003V+\u0000\u0272\u0273\u0005"+ + "\u0001\u0000\u0000\u0273\u0275\u0003V+\u0000\u0274\u0272\u0001\u0000\u0000"+ + "\u0000\u0275\u0278\u0001\u0000\u0000\u0000\u0276\u0274\u0001\u0000\u0000"+ + "\u0000\u0276\u0277\u0001\u0000\u0000\u0000\u0277U\u0001\u0000\u0000\u0000"+ + "\u0278\u0276\u0001\u0000\u0000\u0000\u0279\u027d\u00030\u0018\u0000\u027a"+ + "\u027d\u0003(\u0014\u0000\u027b\u027d\u0003\u00f6{\u0000\u027c\u0279\u0001"+ + "\u0000\u0000\u0000\u027c\u027a\u0001\u0000\u0000\u0000\u027c\u027b\u0001"+ + "\u0000\u0000\u0000\u027d\u027f\u0001\u0000\u0000\u0000\u027e\u0280\u0007"+ + "\u0001\u0000\u0000\u027f\u027e\u0001\u0000\u0000\u0000\u027f\u0280\u0001"+ + "\u0000\u0000\u0000\u0280W\u0001\u0000\u0000\u0000\u0281\u0282\u0003h4"+ + "\u0000\u0282\u0284\u0003Z-\u0000\u0283\u0285\u0003L&\u0000\u0284\u0283"+ + "\u0001\u0000\u0000\u0000\u0284\u0285\u0001\u0000\u0000\u0000\u0285\u0287"+ + "\u0001\u0000\u0000\u0000\u0286\u0288\u0003N\'\u0000\u0287\u0286\u0001"+ + "\u0000\u0000\u0000\u0287\u0288\u0001\u0000\u0000\u0000\u0288\u028a\u0001"+ + "\u0000\u0000\u0000\u0289\u028b\u0003R)\u0000\u028a\u0289\u0001\u0000\u0000"+ + "\u0000\u028a\u028b\u0001\u0000\u0000\u0000\u028bY\u0001\u0000\u0000\u0000"+ + "\u028c\u028d\u00053\u0000\u0000\u028d\u0295\u0003\\.\u0000\u028e\u0291"+ + "\u0005\u0001\u0000\u0000\u028f\u0292\u0003\\.\u0000\u0290\u0292\u0003"+ + " \u0010\u0000\u0291\u028f\u0001\u0000\u0000\u0000\u0291\u0290\u0001\u0000"+ + "\u0000\u0000\u0292\u0294\u0001\u0000\u0000\u0000\u0293\u028e\u0001\u0000"+ + "\u0000\u0000\u0294\u0297\u0001\u0000\u0000\u0000\u0295\u0293\u0001\u0000"+ + "\u0000\u0000\u0295\u0296\u0001\u0000\u0000\u0000\u0296[\u0001\u0000\u0000"+ + "\u0000\u0297\u0295\u0001\u0000\u0000\u0000\u0298\u02a6\u0003\u000e\u0007"+ + "\u0000\u0299\u029b\u0003^/\u0000\u029a\u029c\u0005\u0015\u0000\u0000\u029b"+ + "\u029a\u0001\u0000\u0000\u0000\u029b\u029c\u0001\u0000\u0000\u0000\u029c"+ + "\u029d\u0001\u0000\u0000\u0000\u029d\u02a1\u0003\u00d0h\u0000\u029e\u02a0"+ + "\u0003\u0012\t\u0000\u029f\u029e\u0001\u0000\u0000\u0000\u02a0\u02a3\u0001"+ + "\u0000\u0000\u0000\u02a1\u029f\u0001\u0000\u0000\u0000\u02a1\u02a2\u0001"+ + "\u0000\u0000\u0000\u02a2\u02a6\u0001\u0000\u0000\u0000\u02a3\u02a1\u0001"+ + "\u0000\u0000\u0000\u02a4\u02a6\u0003f3\u0000\u02a5\u0298\u0001\u0000\u0000"+ + "\u0000\u02a5\u0299\u0001\u0000\u0000\u0000\u02a5\u02a4\u0001\u0000\u0000"+ + "\u0000\u02a6]\u0001\u0000\u0000\u0000\u02a7\u02a8\u0003`0\u0000\u02a8"+ + "\u02a9\u0005\u0004\u0000\u0000\u02a9\u02aa\u0003\u00eew\u0000\u02aa\u02b0"+ + "\u0001\u0000\u0000\u0000\u02ab\u02ac\u0003`0\u0000\u02ac\u02ad\u0005\u0004"+ + "\u0000\u0000\u02ad\u02ae\u0003\u00ecv\u0000\u02ae\u02b0\u0001\u0000\u0000"+ + "\u0000\u02af\u02a7\u0001\u0000\u0000\u0000\u02af\u02ab\u0001\u0000\u0000"+ + "\u0000\u02b0_\u0001\u0000\u0000\u0000\u02b1\u02bb\u0003b1\u0000\u02b2"+ + "\u02b7\u0003d2\u0000\u02b3\u02b4\u0005\u0004\u0000\u0000\u02b4\u02b6\u0003"+ + "\u00eew\u0000\u02b5\u02b3\u0001\u0000\u0000\u0000\u02b6\u02b9\u0001\u0000"+ + "\u0000\u0000\u02b7\u02b5\u0001\u0000\u0000\u0000\u02b7\u02b8\u0001\u0000"+ + "\u0000\u0000\u02b8\u02bb\u0001\u0000\u0000\u0000\u02b9\u02b7\u0001\u0000"+ + "\u0000\u0000\u02ba\u02b1\u0001\u0000\u0000\u0000\u02ba\u02b2\u0001\u0000"+ + "\u0000\u0000\u02bba\u0001\u0000\u0000\u0000\u02bc\u02c1\u0003\u00f8|\u0000"+ + "\u02bd\u02be\u0005\u0004\u0000\u0000\u02be\u02c0\u0003\u00eew\u0000\u02bf"+ + "\u02bd\u0001\u0000\u0000\u0000\u02c0\u02c3\u0001\u0000\u0000\u0000\u02c1"+ + "\u02bf\u0001\u0000\u0000\u0000\u02c1\u02c2\u0001\u0000\u0000\u0000\u02c2"+ + "c\u0001\u0000\u0000\u0000\u02c3\u02c1\u0001\u0000\u0000\u0000\u02c4\u02c5"+ + "\u0005`\u0000\u0000\u02c5\u02c6\u0005\u0002\u0000\u0000\u02c6\u02c7\u0003"+ + "`0\u0000\u02c7\u02c8\u0005\u0015\u0000\u0000\u02c8\u02c9\u0003\u00eau"+ + "\u0000\u02c9\u02ca\u0005\u0003\u0000\u0000\u02cae\u0001\u0000\u0000\u0000"+ + "\u02cb\u02cc\u00057\u0000\u0000\u02cc\u02cd\u0003\u00f8|\u0000\u02cd\u02d3"+ + "\u0005\u0004\u0000\u0000\u02ce\u02cf\u0003\u00eew\u0000\u02cf\u02d0\u0005"+ + "\u0004\u0000\u0000\u02d0\u02d2\u0001\u0000\u0000\u0000\u02d1\u02ce\u0001"+ + "\u0000\u0000\u0000\u02d2\u02d5\u0001\u0000\u0000\u0000\u02d3\u02d1\u0001"+ + "\u0000\u0000\u0000\u02d3\u02d4\u0001\u0000\u0000\u0000\u02d4\u02d6\u0001"+ + "\u0000\u0000\u0000\u02d5\u02d3\u0001\u0000\u0000\u0000\u02d6\u02d7\u0003"+ + "\u00ecv\u0000\u02d7g\u0001\u0000\u0000\u0000\u02d8\u02da\u0005U\u0000"+ + "\u0000\u02d9\u02db\u0005\'\u0000\u0000\u02da\u02d9\u0001\u0000\u0000\u0000"+ + "\u02da\u02db\u0001\u0000\u0000\u0000\u02db\u02dc\u0001\u0000\u0000\u0000"+ + "\u02dc\u02dd\u0003j5\u0000\u02ddi\u0001\u0000\u0000\u0000\u02de\u02e3"+ + "\u0003&\u0013\u0000\u02df\u02e3\u0003l6\u0000\u02e0\u02e3\u0003J%\u0000"+ + "\u02e1\u02e3\u0003\u00d0h\u0000\u02e2\u02de\u0001\u0000\u0000\u0000\u02e2"+ + "\u02df\u0001\u0000\u0000\u0000\u02e2\u02e0\u0001\u0000\u0000\u0000\u02e2"+ + "\u02e1\u0001\u0000\u0000\u0000\u02e3k\u0001\u0000\u0000\u0000\u02e4\u02ec"+ + "\u0003\u0092I\u0000\u02e5\u02ec\u0003\u009aM\u0000\u02e6\u02ec\u0003\u00a0"+ + "P\u0000\u02e7\u02ec\u0003\u009cN\u0000\u02e8\u02ec\u0003\u009eO\u0000"+ + "\u02e9\u02ec\u0003\u00be_\u0000\u02ea\u02ec\u0003\u00a6S\u0000\u02eb\u02e4"+ + "\u0001\u0000\u0000\u0000\u02eb\u02e5\u0001\u0000\u0000\u0000\u02eb\u02e6"+ + "\u0001\u0000\u0000\u0000\u02eb\u02e7\u0001\u0000\u0000\u0000\u02eb\u02e8"+ + "\u0001\u0000\u0000\u0000\u02eb\u02e9\u0001\u0000\u0000\u0000\u02eb\u02ea"+ + "\u0001\u0000\u0000\u0000\u02ecm\u0001\u0000\u0000\u0000\u02ed\u02ee\u0006"+ + "7\uffff\uffff\u0000\u02ee\u02ef\u0003p8\u0000\u02ef\u02f5\u0001\u0000"+ + "\u0000\u0000\u02f0\u02f1\n\u0001\u0000\u0000\u02f1\u02f2\u0005P\u0000"+ + "\u0000\u02f2\u02f4\u0003p8\u0000\u02f3\u02f0\u0001\u0000\u0000\u0000\u02f4"+ + "\u02f7\u0001\u0000\u0000\u0000\u02f5\u02f3\u0001\u0000\u0000\u0000\u02f5"+ + "\u02f6\u0001\u0000\u0000\u0000\u02f6o\u0001\u0000\u0000\u0000\u02f7\u02f5"+ + "\u0001\u0000\u0000\u0000\u02f8\u02f9\u00068\uffff\uffff\u0000\u02f9\u02fa"+ + "\u0003r9\u0000\u02fa\u0300\u0001\u0000\u0000\u0000\u02fb\u02fc\n\u0001"+ + "\u0000\u0000\u02fc\u02fd\u0005\u0013\u0000\u0000\u02fd\u02ff\u0003r9\u0000"+ + "\u02fe\u02fb\u0001\u0000\u0000\u0000\u02ff\u0302\u0001\u0000\u0000\u0000"+ + "\u0300\u02fe\u0001\u0000\u0000\u0000\u0300\u0301\u0001\u0000\u0000\u0000"+ + "\u0301q\u0001\u0000\u0000\u0000\u0302\u0300\u0001\u0000\u0000\u0000\u0303"+ + "\u0305\u0005J\u0000\u0000\u0304\u0303\u0001\u0000\u0000\u0000\u0304\u0305"+ + "\u0001\u0000\u0000\u0000\u0305\u0306\u0001\u0000\u0000\u0000\u0306\u0307"+ + "\u0003t:\u0000\u0307s\u0001\u0000\u0000\u0000\u0308\u030e\u0003v;\u0000"+ + "\u0309\u030a\u0005\u0002\u0000\u0000\u030a\u030b\u0003n7\u0000\u030b\u030c"+ + "\u0005\u0003\u0000\u0000\u030c\u030e\u0001\u0000\u0000\u0000\u030d\u0308"+ + "\u0001\u0000\u0000\u0000\u030d\u0309\u0001\u0000\u0000\u0000\u030eu\u0001"+ + "\u0000\u0000\u0000\u030f\u0318\u0003\u008eG\u0000\u0310\u0318\u0003x<"+ + "\u0000\u0311\u0318\u0003z=\u0000\u0312\u0318\u0003~?\u0000\u0313\u0318"+ + "\u0003\u0080@\u0000\u0314\u0318\u0003\u0082A\u0000\u0315\u0318\u0003\u0084"+ + "B\u0000\u0316\u0318\u0003\u008aE\u0000\u0317\u030f\u0001\u0000\u0000\u0000"+ + "\u0317\u0310\u0001\u0000\u0000\u0000\u0317\u0311\u0001\u0000\u0000\u0000"+ + "\u0317\u0312\u0001\u0000\u0000\u0000\u0317\u0313\u0001\u0000\u0000\u0000"+ + "\u0317\u0314\u0001\u0000\u0000\u0000\u0317\u0315\u0001\u0000\u0000\u0000"+ + "\u0317\u0316\u0001\u0000\u0000\u0000\u0318w\u0001\u0000\u0000\u0000\u0319"+ + "\u031b\u0003\u0092I\u0000\u031a\u031c\u0005J\u0000\u0000\u031b\u031a\u0001"+ + "\u0000\u0000\u0000\u031b\u031c\u0001\u0000\u0000\u0000\u031c\u031d\u0001"+ + "\u0000\u0000\u0000\u031d\u031e\u0005\u0018\u0000\u0000\u031e\u031f\u0003"+ + "\u0092I\u0000\u031f\u0320\u0005\u0013\u0000\u0000\u0320\u0321\u0003\u0092"+ + "I\u0000\u0321\u0335\u0001\u0000\u0000\u0000\u0322\u0324\u0003\u009aM\u0000"+ + "\u0323\u0325\u0005J\u0000\u0000\u0324\u0323\u0001\u0000\u0000\u0000\u0324"+ + "\u0325\u0001\u0000\u0000\u0000\u0325\u0326\u0001\u0000\u0000\u0000\u0326"+ + "\u0327\u0005\u0018\u0000\u0000\u0327\u0328\u0003\u009aM\u0000\u0328\u0329"+ + "\u0005\u0013\u0000\u0000\u0329\u032a\u0003\u009aM\u0000\u032a\u0335\u0001"+ + "\u0000\u0000\u0000\u032b\u032d\u0003\u009cN\u0000\u032c\u032e\u0005J\u0000"+ + "\u0000\u032d\u032c\u0001\u0000\u0000\u0000\u032d\u032e\u0001\u0000\u0000"+ + "\u0000\u032e\u032f\u0001\u0000\u0000\u0000\u032f\u0330\u0005\u0018\u0000"+ + "\u0000\u0330\u0331\u0003\u009cN\u0000\u0331\u0332\u0005\u0013\u0000\u0000"+ + "\u0332\u0333\u0003\u009cN\u0000\u0333\u0335\u0001\u0000\u0000\u0000\u0334"+ + "\u0319\u0001\u0000\u0000\u0000\u0334\u0322\u0001\u0000\u0000\u0000\u0334"+ + "\u032b\u0001\u0000\u0000\u0000\u0335y\u0001\u0000\u0000\u0000\u0336\u0339"+ + "\u00032\u0019\u0000\u0337\u0339\u0003\u00a8T\u0000\u0338\u0336\u0001\u0000"+ + "\u0000\u0000\u0338\u0337\u0001\u0000\u0000\u0000\u0339\u033b\u0001\u0000"+ + "\u0000\u0000\u033a\u033c\u0005J\u0000\u0000\u033b\u033a\u0001\u0000\u0000"+ + "\u0000\u033b\u033c\u0001\u0000\u0000\u0000\u033c\u033d\u0001\u0000\u0000"+ + "\u0000\u033d\u034e\u00057\u0000\u0000\u033e\u033f\u0005\u0002\u0000\u0000"+ + "\u033f\u0344\u0003|>\u0000\u0340\u0341\u0005\u0001\u0000\u0000\u0341\u0343"+ + "\u0003|>\u0000\u0342\u0340\u0001\u0000\u0000\u0000\u0343\u0346\u0001\u0000"+ + "\u0000\u0000\u0344\u0342\u0001\u0000\u0000\u0000\u0344\u0345\u0001\u0000"+ + "\u0000\u0000\u0345\u0347\u0001\u0000\u0000\u0000\u0346\u0344\u0001\u0000"+ + "\u0000\u0000\u0347\u0348\u0005\u0003\u0000\u0000\u0348\u034f\u0001\u0000"+ + "\u0000\u0000\u0349\u034a\u0005\u0002\u0000\u0000\u034a\u034b\u0003X,\u0000"+ + "\u034b\u034c\u0005\u0003\u0000\u0000\u034c\u034f\u0001\u0000\u0000\u0000"+ + "\u034d\u034f\u0003\u00fa}\u0000\u034e\u033e\u0001\u0000\u0000\u0000\u034e"+ + "\u0349\u0001\u0000\u0000\u0000\u034e\u034d\u0001\u0000\u0000\u0000\u034f"+ + "{\u0001\u0000\u0000\u0000\u0350\u0353\u0003\u00d4j\u0000\u0351\u0353\u0003"+ + "\u00fc~\u0000\u0352\u0350\u0001\u0000\u0000\u0000\u0352\u0351\u0001\u0000"+ + "\u0000\u0000\u0353}\u0001\u0000\u0000\u0000\u0354\u0356\u0003\u009aM\u0000"+ + "\u0355\u0357\u0005J\u0000\u0000\u0356\u0355\u0001\u0000\u0000\u0000\u0356"+ + "\u0357\u0001\u0000\u0000\u0000\u0357\u0358\u0001\u0000\u0000\u0000\u0358"+ + "\u0359\u0005@\u0000\u0000\u0359\u035c\u0003\u00d8l\u0000\u035a\u035b\u0005"+ + ",\u0000\u0000\u035b\u035d\u0003\u00deo\u0000\u035c\u035a\u0001\u0000\u0000"+ + "\u0000\u035c\u035d\u0001\u0000\u0000\u0000\u035d\u007f\u0001\u0000\u0000"+ + "\u0000\u035e\u0361\u0003&\u0013\u0000\u035f\u0361\u0003\u00d6k\u0000\u0360"+ + "\u035e\u0001\u0000\u0000\u0000\u0360\u035f\u0001\u0000\u0000\u0000\u0361"+ + "\u0362\u0001\u0000\u0000\u0000\u0362\u0364\u0005:\u0000\u0000\u0363\u0365"+ + "\u0005J\u0000\u0000\u0364\u0363\u0001\u0000\u0000\u0000\u0364\u0365\u0001"+ + "\u0000\u0000\u0000\u0365\u0366\u0001\u0000\u0000\u0000\u0366\u0367\u0005"+ + "K\u0000\u0000\u0367\u0081\u0001\u0000\u0000\u0000\u0368\u0369\u00036\u001b"+ + "\u0000\u0369\u036b\u0005:\u0000\u0000\u036a\u036c\u0005J\u0000\u0000\u036b"+ + "\u036a\u0001\u0000\u0000\u0000\u036b\u036c\u0001\u0000\u0000\u0000\u036c"+ + "\u036d\u0001\u0000\u0000\u0000\u036d\u036e\u0005*\u0000\u0000\u036e\u0083"+ + "\u0001\u0000\u0000\u0000\u036f\u0371\u0003\u0086C\u0000\u0370\u0372\u0005"+ + "J\u0000\u0000\u0371\u0370\u0001\u0000\u0000\u0000\u0371\u0372\u0001\u0000"+ + "\u0000\u0000\u0372\u0373\u0001\u0000\u0000\u0000\u0373\u0375\u0005F\u0000"+ + "\u0000\u0374\u0376\u0005N\u0000\u0000\u0375\u0374\u0001\u0000\u0000\u0000"+ + "\u0375\u0376\u0001\u0000\u0000\u0000\u0376\u0377\u0001\u0000\u0000\u0000"+ + "\u0377\u0378\u00036\u001b\u0000\u0378\u0085\u0001\u0000\u0000\u0000\u0379"+ + "\u037d\u00034\u001a\u0000\u037a\u037d\u00030\u0018\u0000\u037b\u037d\u0003"+ + "\u0088D\u0000\u037c\u0379\u0001\u0000\u0000\u0000\u037c\u037a\u0001\u0000"+ + "\u0000\u0000\u037c\u037b\u0001\u0000\u0000\u0000\u037d\u0087\u0001\u0000"+ + "\u0000\u0000\u037e\u0382\u0003\u00d0h\u0000\u037f\u0382\u0003\u00d6k\u0000"+ + "\u0380\u0382\u0003\u00d4j\u0000\u0381\u037e\u0001\u0000\u0000\u0000\u0381"+ + "\u037f\u0001\u0000\u0000\u0000\u0381\u0380\u0001\u0000\u0000\u0000\u0382"+ + "\u0089\u0001\u0000\u0000\u0000\u0383\u0385\u0005J\u0000\u0000\u0384\u0383"+ + "\u0001\u0000\u0000\u0000\u0384\u0385\u0001\u0000\u0000\u0000\u0385\u0386"+ + "\u0001\u0000\u0000\u0000\u0386\u0387\u0005-\u0000\u0000\u0387\u0388\u0005"+ + "\u0002\u0000\u0000\u0388\u0389\u0003X,\u0000\u0389\u038a\u0005\u0003\u0000"+ + "\u0000\u038a\u008b\u0001\u0000\u0000\u0000\u038b\u038c\u0007\u0002\u0000"+ + "\u0000\u038c\u038d\u0005\u0002\u0000\u0000\u038d\u038e\u0003X,\u0000\u038e"+ + "\u038f\u0005\u0003\u0000\u0000\u038f\u008d\u0001\u0000\u0000\u0000\u0390"+ + "\u0391\u0003\u009aM\u0000\u0391\u0394\u0003\u0090H\u0000\u0392\u0395\u0003"+ + "\u009aM\u0000\u0393\u0395\u0003\u008cF\u0000\u0394\u0392\u0001\u0000\u0000"+ + "\u0000\u0394\u0393\u0001\u0000\u0000\u0000\u0395\u03b9\u0001\u0000\u0000"+ + "\u0000\u0396\u0397\u0003\u009eO\u0000\u0397\u039a\u0007\u0003\u0000\u0000"+ + "\u0398\u039b\u0003\u009eO\u0000\u0399\u039b\u0003\u008cF\u0000\u039a\u0398"+ + "\u0001\u0000\u0000\u0000\u039a\u0399\u0001\u0000\u0000\u0000\u039b\u03b9"+ + "\u0001\u0000\u0000\u0000\u039c\u039d\u0003\u00a0P\u0000\u039d\u03a0\u0007"+ + "\u0003\u0000\u0000\u039e\u03a1\u0003\u00a0P\u0000\u039f\u03a1\u0003\u008c"+ + "F\u0000\u03a0\u039e\u0001\u0000\u0000\u0000\u03a0\u039f\u0001\u0000\u0000"+ + "\u0000\u03a1\u03b9\u0001\u0000\u0000\u0000\u03a2\u03a3\u0003\u009cN\u0000"+ + "\u03a3\u03a6\u0003\u0090H\u0000\u03a4\u03a7\u0003\u009cN\u0000\u03a5\u03a7"+ + "\u0003\u008cF\u0000\u03a6\u03a4\u0001\u0000\u0000\u0000\u03a6\u03a5\u0001"+ + "\u0000\u0000\u0000\u03a7\u03b9\u0001\u0000\u0000\u0000\u03a8\u03a9\u0003"+ + "\u00a2Q\u0000\u03a9\u03ac\u0007\u0003\u0000\u0000\u03aa\u03ad\u0003\u00a2"+ + "Q\u0000\u03ab\u03ad\u0003\u008cF\u0000\u03ac\u03aa\u0001\u0000\u0000\u0000"+ + "\u03ac\u03ab\u0001\u0000\u0000\u0000\u03ad\u03b9\u0001\u0000\u0000\u0000"+ + "\u03ae\u03af\u0003\u0092I\u0000\u03af\u03b2\u0003\u0090H\u0000\u03b0\u03b3"+ + "\u0003\u0092I\u0000\u03b1\u03b3\u0003\u008cF\u0000\u03b2\u03b0\u0001\u0000"+ + "\u0000\u0000\u03b2\u03b1\u0001\u0000\u0000\u0000\u03b3\u03b9\u0001\u0000"+ + "\u0000\u0000\u03b4\u03b5\u0003\u00a6S\u0000\u03b5\u03b6\u0007\u0003\u0000"+ + "\u0000\u03b6\u03b7\u0003\u00a6S\u0000\u03b7\u03b9\u0001\u0000\u0000\u0000"+ + "\u03b8\u0390\u0001\u0000\u0000\u0000\u03b8\u0396\u0001\u0000\u0000\u0000"+ + "\u03b8\u039c\u0001\u0000\u0000\u0000\u03b8\u03a2\u0001\u0000\u0000\u0000"+ + "\u03b8\u03a8\u0001\u0000\u0000\u0000\u03b8\u03ae\u0001\u0000\u0000\u0000"+ + "\u03b8\u03b4\u0001\u0000\u0000\u0000\u03b9\u008f\u0001\u0000\u0000\u0000"+ + "\u03ba\u03c1\u0005i\u0000\u0000\u03bb\u03c1\u0005\u0005\u0000\u0000\u03bc"+ + "\u03c1\u0005\u0006\u0000\u0000\u03bd\u03c1\u0005\u0007\u0000\u0000\u03be"+ + "\u03c1\u0005\b\u0000\u0000\u03bf\u03c1\u0005j\u0000\u0000\u03c0\u03ba"+ + "\u0001\u0000\u0000\u0000\u03c0\u03bb\u0001\u0000\u0000\u0000\u03c0\u03bc"+ + "\u0001\u0000\u0000\u0000\u03c0\u03bd\u0001\u0000\u0000\u0000\u03c0\u03be"+ + "\u0001\u0000\u0000\u0000\u03c0\u03bf\u0001\u0000\u0000\u0000\u03c1\u0091"+ + "\u0001\u0000\u0000\u0000\u03c2\u03c3\u0006I\uffff\uffff\u0000\u03c3\u03c4"+ + "\u0003\u0094J\u0000\u03c4\u03ca\u0001\u0000\u0000\u0000\u03c5\u03c6\n"+ + "\u0001\u0000\u0000\u03c6\u03c7\u0007\u0004\u0000\u0000\u03c7\u03c9\u0003"+ + "\u0094J\u0000\u03c8\u03c5\u0001\u0000\u0000\u0000\u03c9\u03cc\u0001\u0000"+ + "\u0000\u0000\u03ca\u03c8\u0001\u0000\u0000\u0000\u03ca\u03cb\u0001\u0000"+ + "\u0000\u0000\u03cb\u0093\u0001\u0000\u0000\u0000\u03cc\u03ca\u0001\u0000"+ + "\u0000\u0000\u03cd\u03ce\u0006J\uffff\uffff\u0000\u03ce\u03cf\u0003\u0096"+ + "K\u0000\u03cf\u03d5\u0001\u0000\u0000\u0000\u03d0\u03d1\n\u0001\u0000"+ + "\u0000\u03d1\u03d2\u0007\u0005\u0000\u0000\u03d2\u03d4\u0003\u0096K\u0000"+ + "\u03d3\u03d0\u0001\u0000\u0000\u0000\u03d4\u03d7\u0001\u0000\u0000\u0000"+ + "\u03d5\u03d3\u0001\u0000\u0000\u0000\u03d5\u03d6\u0001\u0000\u0000\u0000"+ + "\u03d6\u0095\u0001\u0000\u0000\u0000\u03d7\u03d5\u0001\u0000\u0000\u0000"+ + "\u03d8\u03da\u0007\u0004\u0000\u0000\u03d9\u03d8\u0001\u0000\u0000\u0000"+ + "\u03d9\u03da\u0001\u0000\u0000\u0000\u03da\u03db\u0001\u0000\u0000\u0000"+ + "\u03db\u03dc\u0003\u0098L\u0000\u03dc\u0097\u0001\u0000\u0000\u0000\u03dd"+ + "\u03ed\u00032\u0019\u0000\u03de\u03ed\u0003\u00e0p\u0000\u03df\u03e0\u0005"+ + "\u0002\u0000\u0000\u03e0\u03e1\u0003\u0092I\u0000\u03e1\u03e2\u0005\u0003"+ + "\u0000\u0000\u03e2\u03ed\u0001\u0000\u0000\u0000\u03e3\u03ed\u0003\u00d6"+ + "k\u0000\u03e4\u03ed\u0003\u00aaU\u0000\u03e5\u03ed\u0003J%\u0000\u03e6"+ + "\u03ed\u0003\u00be_\u0000\u03e7\u03ed\u0003\u00b2Y\u0000\u03e8\u03e9\u0005"+ + "\u0002\u0000\u0000\u03e9\u03ea\u0003X,\u0000\u03ea\u03eb\u0005\u0003\u0000"+ + "\u0000\u03eb\u03ed\u0001\u0000\u0000\u0000\u03ec\u03dd\u0001\u0000\u0000"+ + "\u0000\u03ec\u03de\u0001\u0000\u0000\u0000\u03ec\u03df\u0001\u0000\u0000"+ + "\u0000\u03ec\u03e3\u0001\u0000\u0000\u0000\u03ec\u03e4\u0001\u0000\u0000"+ + "\u0000\u03ec\u03e5\u0001\u0000\u0000\u0000\u03ec\u03e6\u0001\u0000\u0000"+ + "\u0000\u03ec\u03e7\u0001\u0000\u0000\u0000\u03ec\u03e8\u0001\u0000\u0000"+ + "\u0000\u03ed\u0099\u0001\u0000\u0000\u0000\u03ee\u03fa\u00032\u0019\u0000"+ + "\u03ef\u03fa\u0003\u00e6s\u0000\u03f0\u03fa\u0003\u00d6k\u0000\u03f1\u03fa"+ + "\u0003\u00aeW\u0000\u03f2\u03fa\u0003J%\u0000\u03f3\u03fa\u0003\u00be"+ + "_\u0000\u03f4\u03fa\u0003\u00b2Y\u0000\u03f5\u03f6\u0005\u0002\u0000\u0000"+ + "\u03f6\u03f7\u0003X,\u0000\u03f7\u03f8\u0005\u0003\u0000\u0000\u03f8\u03fa"+ + "\u0001\u0000\u0000\u0000\u03f9\u03ee\u0001\u0000\u0000\u0000\u03f9\u03ef"+ + "\u0001\u0000\u0000\u0000\u03f9\u03f0\u0001\u0000\u0000\u0000\u03f9\u03f1"+ + "\u0001\u0000\u0000\u0000\u03f9\u03f2\u0001\u0000\u0000\u0000\u03f9\u03f3"+ + "\u0001\u0000\u0000\u0000\u03f9\u03f4\u0001\u0000\u0000\u0000\u03f9\u03f5"+ + "\u0001\u0000\u0000\u0000\u03fa\u009b\u0001\u0000\u0000\u0000\u03fb\u0407"+ + "\u00032\u0019\u0000\u03fc\u0407\u0003\u00d6k\u0000\u03fd\u0407\u0003\u00ac"+ + "V\u0000\u03fe\u0407\u0003J%\u0000\u03ff\u0407\u0003\u00be_\u0000\u0400"+ + "\u0407\u0003\u00b2Y\u0000\u0401\u0407\u0003\u00dam\u0000\u0402\u0403\u0005"+ + "\u0002\u0000\u0000\u0403\u0404\u0003X,\u0000\u0404\u0405\u0005\u0003\u0000"+ + "\u0000\u0405\u0407\u0001\u0000\u0000\u0000\u0406\u03fb\u0001\u0000\u0000"+ + "\u0000\u0406\u03fc\u0001\u0000\u0000\u0000\u0406\u03fd\u0001\u0000\u0000"+ + "\u0000\u0406\u03fe\u0001\u0000\u0000\u0000\u0406\u03ff\u0001\u0000\u0000"+ + "\u0000\u0406\u0400\u0001\u0000\u0000\u0000\u0406\u0401\u0001\u0000\u0000"+ + "\u0000\u0406\u0402\u0001\u0000\u0000\u0000\u0407\u009d\u0001\u0000\u0000"+ + "\u0000\u0408\u0412\u00032\u0019\u0000\u0409\u0412\u0003\u00e2q\u0000\u040a"+ + "\u0412\u0003\u00d6k\u0000\u040b\u0412\u0003\u00be_\u0000\u040c\u0412\u0003"+ + "\u00b2Y\u0000\u040d\u040e\u0005\u0002\u0000\u0000\u040e\u040f\u0003X,"+ + "\u0000\u040f\u0410\u0005\u0003\u0000\u0000\u0410\u0412\u0001\u0000\u0000"+ + "\u0000\u0411\u0408\u0001\u0000\u0000\u0000\u0411\u0409\u0001\u0000\u0000"+ + "\u0000\u0411\u040a\u0001\u0000\u0000\u0000\u0411\u040b\u0001\u0000\u0000"+ + "\u0000\u0411\u040c\u0001\u0000\u0000\u0000\u0411\u040d\u0001\u0000\u0000"+ + "\u0000\u0412\u009f\u0001\u0000\u0000\u0000\u0413\u041c\u00032\u0019\u0000"+ + "\u0414\u041c\u0003\u00e4r\u0000\u0415\u041c\u0003\u00d6k\u0000\u0416\u041c"+ + "\u0003\u00be_\u0000\u0417\u0418\u0005\u0002\u0000\u0000\u0418\u0419\u0003"+ + "X,\u0000\u0419\u041a\u0005\u0003\u0000\u0000\u041a\u041c\u0001\u0000\u0000"+ + "\u0000\u041b\u0413\u0001\u0000\u0000\u0000\u041b\u0414\u0001\u0000\u0000"+ + "\u0000\u041b\u0415\u0001\u0000\u0000\u0000\u041b\u0416\u0001\u0000\u0000"+ + "\u0000\u041b\u0417\u0001\u0000\u0000\u0000\u041c\u00a1\u0001\u0000\u0000"+ + "\u0000\u041d\u0420\u00034\u001a\u0000\u041e\u0420\u0003\u00a4R\u0000\u041f"+ + "\u041d\u0001\u0000\u0000\u0000\u041f\u041e\u0001\u0000\u0000\u0000\u0420"+ + "\u00a3\u0001\u0000\u0000\u0000\u0421\u0424\u0003\u00d0h\u0000\u0422\u0424"+ + "\u0003\u00d6k\u0000\u0423\u0421\u0001\u0000\u0000\u0000\u0423\u0422\u0001"+ + "\u0000\u0000\u0000\u0424\u00a5\u0001\u0000\u0000\u0000\u0425\u0429\u0003"+ + "\u00a8T\u0000\u0426\u0429\u0003\u00dcn\u0000\u0427\u0429\u0003\u00d6k"+ + "\u0000\u0428\u0425\u0001\u0000\u0000\u0000\u0428\u0426\u0001\u0000\u0000"+ + "\u0000\u0428\u0427\u0001\u0000\u0000\u0000\u0429\u00a7\u0001\u0000\u0000"+ + "\u0000\u042a\u042b\u0005c\u0000\u0000\u042b\u042f\u0005\u0002\u0000\u0000"+ + "\u042c\u0430\u0003(\u0014\u0000\u042d\u0430\u00034\u001a\u0000\u042e\u0430"+ + "\u0003\u00d6k\u0000\u042f\u042c\u0001\u0000\u0000\u0000\u042f\u042d\u0001"+ + "\u0000\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u0430\u0431\u0001"+ + "\u0000\u0000\u0000\u0431\u0432\u0005\u0003\u0000\u0000\u0432\u00a9\u0001"+ + "\u0000\u0000\u0000\u0433\u0434\u0005?\u0000\u0000\u0434\u0435\u0005\u0002"+ + "\u0000\u0000\u0435\u0436\u0003\u009aM\u0000\u0436\u0437\u0005\u0003\u0000"+ + "\u0000\u0437\u0487\u0001\u0000\u0000\u0000\u0438\u0439\u0005C\u0000\u0000"+ + "\u0439\u043a\u0005\u0002\u0000\u0000\u043a\u043b\u0003\u009aM\u0000\u043b"+ + "\u043c\u0005\u0001\u0000\u0000\u043c\u043f\u0003\u009aM\u0000\u043d\u043e"+ + "\u0005\u0001\u0000\u0000\u043e\u0440\u0003\u0092I\u0000\u043f\u043d\u0001"+ + "\u0000\u0000\u0000\u043f\u0440\u0001\u0000\u0000\u0000\u0440\u0441\u0001"+ + "\u0000\u0000\u0000\u0441\u0442\u0005\u0003\u0000\u0000\u0442\u0487\u0001"+ + "\u0000\u0000\u0000\u0443\u0444\u0005\u0011\u0000\u0000\u0444\u0445\u0005"+ + "\u0002\u0000\u0000\u0445\u0446\u0003\u0092I\u0000\u0446\u0447\u0005\u0003"+ + "\u0000\u0000\u0447\u0487\u0001\u0000\u0000\u0000\u0448\u0449\u0005\u001c"+ + "\u0000\u0000\u0449\u044a\u0005\u0002\u0000\u0000\u044a\u044b\u0003\u0092"+ + "I\u0000\u044b\u044c\u0005\u0003\u0000\u0000\u044c\u0487\u0001\u0000\u0000"+ + "\u0000\u044d\u044e\u0005.\u0000\u0000\u044e\u044f\u0005\u0002\u0000\u0000"+ + "\u044f\u0450\u0003\u0092I\u0000\u0450\u0451\u0005\u0003\u0000\u0000\u0451"+ + "\u0487\u0001\u0000\u0000\u0000\u0452\u0453\u00052\u0000\u0000\u0453\u0454"+ + "\u0005\u0002\u0000\u0000\u0454\u0455\u0003\u0092I\u0000\u0455\u0456\u0005"+ + "\u0003\u0000\u0000\u0456\u0487\u0001\u0000\u0000\u0000\u0457\u0458\u0005"+ + "A\u0000\u0000\u0458\u0459\u0005\u0002\u0000\u0000\u0459\u045a\u0003\u0092"+ + "I\u0000\u045a\u045b\u0005\u0003\u0000\u0000\u045b\u0487\u0001\u0000\u0000"+ + "\u0000\u045c\u045d\u0005W\u0000\u0000\u045d\u045e\u0005\u0002\u0000\u0000"+ + "\u045e\u045f\u0003\u0092I\u0000\u045f\u0460\u0005\u0003\u0000\u0000\u0460"+ + "\u0487\u0001\u0000\u0000\u0000\u0461\u0462\u0005Z\u0000\u0000\u0462\u0463"+ + "\u0005\u0002\u0000\u0000\u0463\u0464\u0003\u0092I\u0000\u0464\u0465\u0005"+ + "\u0003\u0000\u0000\u0465\u0487\u0001\u0000\u0000\u0000\u0466\u0467\u0005"+ + "H\u0000\u0000\u0467\u0468\u0005\u0002\u0000\u0000\u0468\u0469\u0003\u0092"+ + "I\u0000\u0469\u046a\u0005\u0001\u0000\u0000\u046a\u046b\u0003\u0092I\u0000"+ + "\u046b\u046c\u0005\u0003\u0000\u0000\u046c\u0487\u0001\u0000\u0000\u0000"+ + "\u046d\u046e\u0005S\u0000\u0000\u046e\u046f\u0005\u0002\u0000\u0000\u046f"+ + "\u0470\u0003\u0092I\u0000\u0470\u0471\u0005\u0001\u0000\u0000\u0471\u0472"+ + "\u0003\u0092I\u0000\u0472\u0473\u0005\u0003\u0000\u0000\u0473\u0487\u0001"+ + "\u0000\u0000\u0000\u0474\u0475\u0005T\u0000\u0000\u0475\u0476\u0005\u0002"+ + "\u0000\u0000\u0476\u0477\u0003\u0092I\u0000\u0477\u0478\u0005\u0001\u0000"+ + "\u0000\u0478\u0479\u0003\u0092I\u0000\u0479\u047a\u0005\u0003\u0000\u0000"+ + "\u047a\u0487\u0001\u0000\u0000\u0000\u047b\u047c\u0005X\u0000\u0000\u047c"+ + "\u047d\u0005\u0002\u0000\u0000\u047d\u047e\u00036\u001b\u0000\u047e\u047f"+ + "\u0005\u0003\u0000\u0000\u047f\u0487\u0001\u0000\u0000\u0000\u0480\u0481"+ + "\u00058\u0000\u0000\u0481\u0482\u0005\u0002\u0000\u0000\u0482\u0483\u0003"+ + "\u00d0h\u0000\u0483\u0484\u0005\u0003\u0000\u0000\u0484\u0487\u0001\u0000"+ + "\u0000\u0000\u0485\u0487\u0003\u00b4Z\u0000\u0486\u0433\u0001\u0000\u0000"+ + "\u0000\u0486\u0438\u0001\u0000\u0000\u0000\u0486\u0443\u0001\u0000\u0000"+ + "\u0000\u0486\u0448\u0001\u0000\u0000\u0000\u0486\u044d\u0001\u0000\u0000"+ + "\u0000\u0486\u0452\u0001\u0000\u0000\u0000\u0486\u0457\u0001\u0000\u0000"+ + "\u0000\u0486\u045c\u0001\u0000\u0000\u0000\u0486\u0461\u0001\u0000\u0000"+ + "\u0000\u0486\u0466\u0001\u0000\u0000\u0000\u0486\u046d\u0001\u0000\u0000"+ + "\u0000\u0486\u0474\u0001\u0000\u0000\u0000\u0486\u047b\u0001\u0000\u0000"+ + "\u0000\u0486\u0480\u0001\u0000\u0000\u0000\u0486\u0485\u0001\u0000\u0000"+ + "\u0000\u0487\u00ab\u0001\u0000\u0000\u0000\u0488\u0493\u0005 \u0000\u0000"+ + "\u0489\u0493\u0005!\u0000\u0000\u048a\u0493\u0005\"\u0000\u0000\u048b"+ + "\u048c\u0005B\u0000\u0000\u048c\u0493\u0005#\u0000\u0000\u048d\u048e\u0005"+ + "B\u0000\u0000\u048e\u0493\u0005^\u0000\u0000\u048f\u0490\u0005B\u0000"+ + "\u0000\u0490\u0493\u0005$\u0000\u0000\u0491\u0493\u0003\u00b8\\\u0000"+ + "\u0492\u0488\u0001\u0000\u0000\u0000\u0492\u0489\u0001\u0000\u0000\u0000"+ + "\u0492\u048a\u0001\u0000\u0000\u0000\u0492\u048b\u0001\u0000\u0000\u0000"+ + "\u0492\u048d\u0001\u0000\u0000\u0000\u0492\u048f\u0001\u0000\u0000\u0000"+ + "\u0492\u0491\u0001\u0000\u0000\u0000\u0493\u00ad\u0001\u0000\u0000\u0000"+ + "\u0494\u0495\u0005\u001e\u0000\u0000\u0495\u0496\u0005\u0002\u0000\u0000"+ + "\u0496\u0497\u0003\u009aM\u0000\u0497\u0498\u0005\u0001\u0000\u0000\u0498"+ + "\u049d\u0003\u009aM\u0000\u0499\u049a\u0005\u0001\u0000\u0000\u049a\u049c"+ + "\u0003\u009aM\u0000\u049b\u0499\u0001\u0000\u0000\u0000\u049c\u049f\u0001"+ + "\u0000\u0000\u0000\u049d\u049b\u0001\u0000\u0000\u0000\u049d\u049e\u0001"+ + "\u0000\u0000\u0000\u049e\u04a0\u0001\u0000\u0000\u0000\u049f\u049d\u0001"+ + "\u0000\u0000\u0000\u04a0\u04a1\u0005\u0003\u0000\u0000\u04a1\u04c6\u0001"+ + "\u0000\u0000\u0000\u04a2\u04a3\u0005[\u0000\u0000\u04a3\u04a4\u0005\u0002"+ + "\u0000\u0000\u04a4\u04a5\u0003\u009aM\u0000\u04a5\u04a6\u0005\u0001\u0000"+ + "\u0000\u04a6\u04a9\u0003\u0092I\u0000\u04a7\u04a8\u0005\u0001\u0000\u0000"+ + "\u04a8\u04aa\u0003\u0092I\u0000\u04a9\u04a7\u0001\u0000\u0000\u0000\u04a9"+ + "\u04aa\u0001\u0000\u0000\u0000\u04aa\u04ab\u0001\u0000\u0000\u0000\u04ab"+ + "\u04ac\u0005\u0003\u0000\u0000\u04ac\u04c6\u0001\u0000\u0000\u0000\u04ad"+ + "\u04ae\u0005a\u0000\u0000\u04ae\u04b6\u0005\u0002\u0000\u0000\u04af\u04b1"+ + "\u0003\u00b0X\u0000\u04b0\u04af\u0001\u0000\u0000\u0000\u04b0\u04b1\u0001"+ + "\u0000\u0000\u0000\u04b1\u04b3\u0001\u0000\u0000\u0000\u04b2\u04b4\u0003"+ + "\u00ceg\u0000\u04b3\u04b2\u0001\u0000\u0000\u0000\u04b3\u04b4\u0001\u0000"+ + "\u0000\u0000\u04b4\u04b5\u0001\u0000\u0000\u0000\u04b5\u04b7\u00053\u0000"+ + "\u0000\u04b6\u04b0\u0001\u0000\u0000\u0000\u04b6\u04b7\u0001\u0000\u0000"+ + "\u0000\u04b7\u04b8\u0001\u0000\u0000\u0000\u04b8\u04b9\u0003\u009aM\u0000"+ + "\u04b9\u04ba\u0005\u0003\u0000\u0000\u04ba\u04c6\u0001\u0000\u0000\u0000"+ + "\u04bb\u04bc\u0005D\u0000\u0000\u04bc\u04bd\u0005\u0002\u0000\u0000\u04bd"+ + "\u04be\u0003\u009aM\u0000\u04be\u04bf\u0005\u0003\u0000\u0000\u04bf\u04c6"+ + "\u0001\u0000\u0000\u0000\u04c0\u04c1\u0005e\u0000\u0000\u04c1\u04c2\u0005"+ + "\u0002\u0000\u0000\u04c2\u04c3\u0003\u009aM\u0000\u04c3\u04c4\u0005\u0003"+ + "\u0000\u0000\u04c4\u04c6\u0001\u0000\u0000\u0000\u04c5\u0494\u0001\u0000"+ + "\u0000\u0000\u04c5\u04a2\u0001\u0000\u0000\u0000\u04c5\u04ad\u0001\u0000"+ + "\u0000\u0000\u04c5\u04bb\u0001\u0000\u0000\u0000\u04c5\u04c0\u0001\u0000"+ + "\u0000\u0000\u04c6\u00af\u0001\u0000\u0000\u0000\u04c7\u04c8\u0007\u0006"+ + "\u0000\u0000\u04c8\u00b1\u0001\u0000\u0000\u0000\u04c9\u04ca\u00054\u0000"+ + "\u0000\u04ca\u04cb\u0005\u0002\u0000\u0000\u04cb\u04d0\u0003\u00fe\u007f"+ + "\u0000\u04cc\u04cd\u0005\u0001\u0000\u0000\u04cd\u04cf\u0003\u00bc^\u0000"+ + "\u04ce\u04cc\u0001\u0000\u0000\u0000\u04cf\u04d2\u0001\u0000\u0000\u0000"+ + "\u04d0\u04ce\u0001\u0000\u0000\u0000\u04d0\u04d1\u0001\u0000\u0000\u0000"+ + "\u04d1\u04d3\u0001\u0000\u0000\u0000\u04d2\u04d0\u0001\u0000\u0000\u0000"+ + "\u04d3\u04d4\u0005\u0003\u0000\u0000\u04d4\u00b3\u0001\u0000\u0000\u0000"+ + "\u04d5\u04d6\u0005/\u0000\u0000\u04d6\u04d7\u0005\u0002\u0000\u0000\u04d7"+ + "\u04d8\u0003\u00b6[\u0000\u04d8\u04d9\u00053\u0000\u0000\u04d9\u04da\u0003"+ + "\u009cN\u0000\u04da\u04db\u0005\u0003\u0000\u0000\u04db\u00b5\u0001\u0000"+ + "\u0000\u0000\u04dc\u04dd\u0003\u00d0h\u0000\u04dd\u00b7\u0001\u0000\u0000"+ + "\u0000\u04de\u04df\u0005/\u0000\u0000\u04df\u04e0\u0005\u0002\u0000\u0000"+ + "\u04e0\u04e1\u0003\u00ba]\u0000\u04e1\u04e2\u00053\u0000\u0000\u04e2\u04e3"+ + "\u0003\u009cN\u0000\u04e3\u04e4\u0005\u0003\u0000\u0000\u04e4\u00b9\u0001"+ + "\u0000\u0000\u0000\u04e5\u04e6\u0003\u00d0h\u0000\u04e6\u00bb\u0001\u0000"+ + "\u0000\u0000\u04e7\u04ec\u0003\u00d4j\u0000\u04e8\u04ec\u00032\u0019\u0000"+ + "\u04e9\u04ec\u0003\u00d6k\u0000\u04ea\u04ec\u0003l6\u0000\u04eb\u04e7"+ + "\u0001\u0000\u0000\u0000\u04eb\u04e8\u0001\u0000\u0000\u0000\u04eb\u04e9"+ + "\u0001\u0000\u0000\u0000\u04eb\u04ea\u0001\u0000\u0000\u0000\u04ec\u00bd"+ + "\u0001\u0000\u0000\u0000\u04ed\u04f2\u0003\u00c0`\u0000\u04ee\u04f2\u0003"+ + "\u00c4b\u0000\u04ef\u04f2\u0003\u00cae\u0000\u04f0\u04f2\u0003\u00ccf"+ + "\u0000\u04f1\u04ed\u0001\u0000\u0000\u0000\u04f1\u04ee\u0001\u0000\u0000"+ + "\u0000\u04f1\u04ef\u0001\u0000\u0000\u0000\u04f1\u04f0\u0001\u0000\u0000"+ + "\u0000\u04f2\u00bf\u0001\u0000\u0000\u0000\u04f3\u04f4\u0005\u001b\u0000"+ + "\u0000\u04f4\u04f8\u0003\u00c2a\u0000\u04f5\u04f7\u0003\u00c2a\u0000\u04f6"+ + "\u04f5\u0001\u0000\u0000\u0000\u04f7\u04fa\u0001\u0000\u0000\u0000\u04f8"+ + "\u04f6\u0001\u0000\u0000\u0000\u04f8\u04f9\u0001\u0000\u0000\u0000\u04f9"+ + "\u04fb\u0001\u0000\u0000\u0000\u04fa\u04f8\u0001\u0000\u0000\u0000\u04fb"+ + "\u04fc\u0005)\u0000\u0000\u04fc\u04fd\u0003l6\u0000\u04fd\u04fe\u0005"+ + "(\u0000\u0000\u04fe\u00c1\u0001\u0000\u0000\u0000\u04ff\u0500\u0005g\u0000"+ + "\u0000\u0500\u0501\u0003n7\u0000\u0501\u0502\u0005]\u0000\u0000\u0502"+ + "\u0503\u0003l6\u0000\u0503\u00c3\u0001\u0000\u0000\u0000\u0504\u0505\u0005"+ + "\u001b\u0000\u0000\u0505\u0506\u0003\u00c6c\u0000\u0506\u050a\u0003\u00c8"+ + "d\u0000\u0507\u0509\u0003\u00c8d\u0000\u0508\u0507\u0001\u0000\u0000\u0000"+ + "\u0509\u050c\u0001\u0000\u0000\u0000\u050a\u0508\u0001\u0000\u0000\u0000"+ + "\u050a\u050b\u0001\u0000\u0000\u0000\u050b\u050d\u0001\u0000\u0000\u0000"+ + "\u050c\u050a\u0001\u0000\u0000\u0000\u050d\u050e\u0005)\u0000\u0000\u050e"+ + "\u050f\u0003l6\u0000\u050f\u0510\u0005(\u0000\u0000\u0510\u00c5\u0001"+ + "\u0000\u0000\u0000\u0511\u0514\u00032\u0019\u0000\u0512\u0514\u0003\u00a8"+ + "T\u0000\u0513\u0511\u0001\u0000\u0000\u0000\u0513\u0512\u0001\u0000\u0000"+ + "\u0000\u0514\u00c7\u0001\u0000\u0000\u0000\u0515\u0516\u0005g\u0000\u0000"+ + "\u0516\u0517\u0003l6\u0000\u0517\u0518\u0005]\u0000\u0000\u0518\u0519"+ + "\u0003l6\u0000\u0519\u00c9\u0001\u0000\u0000\u0000\u051a\u051b\u0005\u001d"+ + "\u0000\u0000\u051b\u051c\u0005\u0002\u0000\u0000\u051c\u051f\u0003l6\u0000"+ + "\u051d\u051e\u0005\u0001\u0000\u0000\u051e\u0520\u0003l6\u0000\u051f\u051d"+ + "\u0001\u0000\u0000\u0000\u0520\u0521\u0001\u0000\u0000\u0000\u0521\u051f"+ + "\u0001\u0000\u0000\u0000\u0521\u0522\u0001\u0000\u0000\u0000\u0522\u0523"+ + "\u0001\u0000\u0000\u0000\u0523\u0524\u0005\u0003\u0000\u0000\u0524\u00cb"+ + "\u0001\u0000\u0000\u0000\u0525\u0526\u0005L\u0000\u0000\u0526\u0527\u0005"+ + "\u0002\u0000\u0000\u0527\u0528\u0003l6\u0000\u0528\u0529\u0005\u0001\u0000"+ + "\u0000\u0529\u052a\u0003l6\u0000\u052a\u052b\u0005\u0003\u0000\u0000\u052b"+ + "\u00cd\u0001\u0000\u0000\u0000\u052c\u052f\u0005k\u0000\u0000\u052d\u052f"+ + "\u0003\u0100\u0080\u0000\u052e\u052c\u0001\u0000\u0000\u0000\u052e\u052d"+ + "\u0001\u0000\u0000\u0000\u052f\u00cf\u0001\u0000\u0000\u0000\u0530\u0533"+ + "\u0005l\u0000\u0000\u0531\u0533\u0007\u0007\u0000\u0000\u0532\u0530\u0001"+ + "\u0000\u0000\u0000\u0532\u0531\u0001\u0000\u0000\u0000\u0533\u00d1\u0001"+ + "\u0000\u0000\u0000\u0534\u0535\u00030\u0018\u0000\u0535\u00d3\u0001\u0000"+ + "\u0000\u0000\u0536\u053e\u0005m\u0000\u0000\u0537\u053e\u0005n\u0000\u0000"+ + "\u0538\u053e\u0005p\u0000\u0000\u0539\u053e\u0005o\u0000\u0000\u053a\u053e"+ + "\u0005q\u0000\u0000\u053b\u053e\u0003\u00e2q\u0000\u053c\u053e\u0003\u00dc"+ + "n\u0000\u053d\u0536\u0001\u0000\u0000\u0000\u053d\u0537\u0001\u0000\u0000"+ + "\u0000\u053d\u0538\u0001\u0000\u0000\u0000\u053d\u0539\u0001\u0000\u0000"+ + "\u0000\u053d\u053a\u0001\u0000\u0000\u0000\u053d\u053b\u0001\u0000\u0000"+ + "\u0000\u053d\u053c\u0001\u0000\u0000\u0000\u053e\u00d5\u0001\u0000\u0000"+ + "\u0000\u053f\u0540\u0005\r\u0000\u0000\u0540\u054b\u0005r\u0000\u0000"+ + "\u0541\u0542\u0005\u000e\u0000\u0000\u0542\u054b\u0005r\u0000\u0000\u0543"+ + "\u0544\u0005\u000e\u0000\u0000\u0544\u054b\u0005p\u0000\u0000\u0545\u0546"+ + "\u0005\r\u0000\u0000\u0546\u0548\u0003\u00d0h\u0000\u0547\u0549\u0005"+ + "\u000f\u0000\u0000\u0548\u0547\u0001\u0000\u0000\u0000\u0548\u0549\u0001"+ + "\u0000\u0000\u0000\u0549\u054b\u0001\u0000\u0000\u0000\u054a\u053f\u0001"+ + "\u0000\u0000\u0000\u054a\u0541\u0001\u0000\u0000\u0000\u054a\u0543\u0001"+ + "\u0000\u0000\u0000\u054a\u0545\u0001\u0000\u0000\u0000\u054b\u00d7\u0001"+ + "\u0000\u0000\u0000\u054c\u054d\u0003\u009aM\u0000\u054d\u00d9\u0001\u0000"+ + "\u0000\u0000\u054e\u054f\u0005m\u0000\u0000\u054f\u00db\u0001\u0000\u0000"+ + "\u0000\u0550\u0551\u0003\u00d0h\u0000\u0551\u00dd\u0001\u0000\u0000\u0000"+ + "\u0552\u0555\u0005k\u0000\u0000\u0553\u0555\u0003\u0100\u0080\u0000\u0554"+ + "\u0552\u0001\u0000\u0000\u0000\u0554\u0553\u0001\u0000\u0000\u0000\u0555"+ + "\u00df\u0001\u0000\u0000\u0000\u0556\u0557\u0007\b\u0000\u0000\u0557\u00e1"+ + "\u0001\u0000\u0000\u0000\u0558\u0559\u0007\t\u0000\u0000\u0559\u00e3\u0001"+ + "\u0000\u0000\u0000\u055a\u055b\u00030\u0018\u0000\u055b\u00e5\u0001\u0000"+ + "\u0000\u0000\u055c\u055d\u0007\n\u0000\u0000\u055d\u00e7\u0001\u0000\u0000"+ + "\u0000\u055e\u055f\u0003\u00d0h\u0000\u055f\u00e9\u0001\u0000\u0000\u0000"+ + "\u0560\u0561\u0003\u00d0h\u0000\u0561\u00eb\u0001\u0000\u0000\u0000\u0562"+ + "\u0563\u0003\u00d0h\u0000\u0563\u00ed\u0001\u0000\u0000\u0000\u0564\u0565"+ + "\u0003\u00d0h\u0000\u0565\u00ef\u0001\u0000\u0000\u0000\u0566\u0567\u0003"+ + "\u00d0h\u0000\u0567\u00f1\u0001\u0000\u0000\u0000\u0568\u0569\u0003\u00d0"+ + "h\u0000\u0569\u00f3\u0001\u0000\u0000\u0000\u056a\u056f\u0003\u00d0h\u0000"+ + "\u056b\u056c\u0005\u0004\u0000\u0000\u056c\u056e\u0003\u00d0h\u0000\u056d"+ + "\u056b\u0001\u0000\u0000\u0000\u056e\u0571\u0001\u0000\u0000\u0000\u056f"+ + "\u056d\u0001\u0000\u0000\u0000\u056f\u0570\u0001\u0000\u0000\u0000\u0570"+ + "\u00f5\u0001\u0000\u0000\u0000\u0571\u056f\u0001\u0000\u0000\u0000\u0572"+ + "\u0573\u0003\u00d0h\u0000\u0573\u00f7\u0001\u0000\u0000\u0000\u0574\u0575"+ + "\u0003\u00d0h\u0000\u0575\u00f9\u0001\u0000\u0000\u0000\u0576\u0577\u0003"+ + "\u00d6k\u0000\u0577\u00fb\u0001\u0000\u0000\u0000\u0578\u0579\u0003\u00d6"+ + "k\u0000\u0579\u00fd\u0001\u0000\u0000\u0000\u057a\u057b\u0003\u00e6s\u0000"+ + "\u057b\u00ff\u0001\u0000\u0000\u0000\u057c\u057f\u0005k\u0000\u0000\u057d"+ + "\u057f\u0003\u00d6k\u0000\u057e\u057c\u0001\u0000\u0000\u0000\u057e\u057d"+ + "\u0001\u0000\u0000\u0000\u057f\u0101\u0001\u0000\u0000\u0000\u008b\u0108"+ + "\u010d\u0110\u0113\u0116\u011a\u011e\u0126\u012b\u0130\u0132\u0137\u013e"+ + "\u0142\u0148\u0150\u0153\u016a\u0173\u017f\u0189\u0193\u019f\u01ab\u01af"+ + "\u01b7\u01ba\u01c2\u01c5\u01d4\u01e1\u01e4\u01ec\u01f2\u01f9\u01fe\u0206"+ + "\u020c\u020f\u0213\u021a\u021f\u0222\u022e\u0238\u0242\u0247\u024f\u0254"+ + "\u0259\u0265\u026a\u0276\u027c\u027f\u0284\u0287\u028a\u0291\u0295\u029b"+ + "\u02a1\u02a5\u02af\u02b7\u02ba\u02c1\u02d3\u02da\u02e2\u02eb\u02f5\u0300"+ + "\u0304\u030d\u0317\u031b\u0324\u032d\u0334\u0338\u033b\u0344\u034e\u0352"+ + "\u0356\u035c\u0360\u0364\u036b\u0371\u0375\u037c\u0381\u0384\u0394\u039a"+ + "\u03a0\u03a6\u03ac\u03b2\u03b8\u03c0\u03ca\u03d5\u03d9\u03ec\u03f9\u0406"+ + "\u0411\u041b\u041f\u0423\u0428\u042f\u043f\u0486\u0492\u049d\u04a9\u04b0"+ + "\u04b3\u04b6\u04c5\u04d0\u04eb\u04f1\u04f8\u050a\u0513\u0521\u052e\u0532"+ + "\u053d\u0548\u054a\u0554\u056f\u057e"; + 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/headless-services/commons/pom.xml b/headless-services/commons/pom.xml index 1ec446ae9..c1a294dcb 100644 --- a/headless-services/commons/pom.xml +++ b/headless-services/commons/pom.xml @@ -31,6 +31,7 @@ commons-gradle commons-rewrite language-server-starter + jpql @@ -125,6 +126,8 @@ 8.5 6.1.1 + + 4.13.1 true vmware diff --git a/headless-services/spring-boot-language-server/pom.xml b/headless-services/spring-boot-language-server/pom.xml index 170c8b25b..2f314ecdf 100644 --- a/headless-services/spring-boot-language-server/pom.xml +++ b/headless-services/spring-boot-language-server/pom.xml @@ -89,6 +89,11 @@ java-properties ${dependencies.version} + + org.springframework.ide.vscode + jpql + ${dependencies.version} + org.springframework.ide.vscode commons-java diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java index 3eb04c27b..09e10c0cb 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java @@ -101,6 +101,11 @@ public class BootJavaConfig implements InitializingBean { return isAll != null && isAll.booleanValue(); } + public boolean isJpqlEnabled() { + Boolean isEnabled = settings.getBoolean("boot-java", "jpql"); + return isEnabled != null && isEnabled.booleanValue(); + } + public String[] xmlBeansFoldersToScan() { String foldersStr = settings.getString("boot-java", "support-spring-xml-config", "scan-folders"); if (foldersStr != null) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java index 545755de3..9e900356b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java @@ -361,6 +361,9 @@ public class BootLanguageServerBootApp { String fileName = path.getFileName().toString(); switch (Files.getFileExtension(fileName)) { case "properties": + if (path.endsWith("/META-INF/jpa-named-queries.properties")) { + return LanguageId.JPA_QUERY_PROPERTIES; + } return LanguageId.BOOT_PROPERTIES; case "yml": return LanguageId.BOOT_PROPERTIES_YAML; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java index 3f0ae6940..68e4a9088 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java @@ -25,6 +25,9 @@ import org.springframework.context.ApplicationContext; import org.springframework.ide.vscode.boot.factories.SpringFactoriesLanguageServerComponents; import org.springframework.ide.vscode.boot.index.cache.IndexCache; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpaQueryPropertiesLanguageServerComponents; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpqlSemanticTokens; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpqlSupportState; import org.springframework.ide.vscode.boot.java.links.JavaElementLocationProvider; import org.springframework.ide.vscode.boot.java.links.SourceLinks; import org.springframework.ide.vscode.boot.java.livehover.v2.SpringProcessLiveDataProvider; @@ -122,7 +125,8 @@ public class BootLanguageServerInitializer implements InitializingBean { new BootJavaLanguageServerComponents(appContext), new SpringXMLLanguageServerComponents(server, springIndexer, params, config), new SpringFactoriesLanguageServerComponents(projectFinder, springIndexer, config), - new PomLanguageServerComponents(server, projectFinder, params.projectObserver, appContext.getBean(SpringProjectsProvider.class)) + new PomLanguageServerComponents(server, projectFinder, params.projectObserver, appContext.getBean(SpringProjectsProvider.class)), + new JpaQueryPropertiesLanguageServerComponents(server.getTextDocumentService(), projectFinder, appContext.getBean(JpqlSemanticTokens.class), appContext.getBean(JpqlSupportState.class)) ); for (LanguageServerComponents c : componentsList) { @@ -152,6 +156,8 @@ public class BootLanguageServerInitializer implements InitializingBean { components.getDocumentSymbolProvider().ifPresent(documents::onDocumentSymbol); components.getInlayHintHandler().ifPresent(documents::onInlayHint); + + components.getSemanticTokensHandler().ifPresent(documents::onSemanticTokens); startListeningToPerformReconcile(); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java index 7d165db0a..fc5e0b065 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 VMware, Inc. + * Copyright (c) 2023, 2024 VMware, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -12,6 +12,9 @@ package org.springframework.ide.vscode.boot.app; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JdtDataQuerySemanticTokensProvider; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpqlSemanticTokens; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpqlSupportState; import org.springframework.ide.vscode.boot.java.reconcilers.AddConfigurationIfBeansPresentReconciler; import org.springframework.ide.vscode.boot.java.reconcilers.AnnotationNodeReconciler; import org.springframework.ide.vscode.boot.java.reconcilers.AuthorizeHttpRequestsReconciler; @@ -106,5 +109,9 @@ public class JdtConfig { @Bean EntityIdForRepoReconciler entityIdForRepoReconciler(SimpleLanguageServer server) { return new EntityIdForRepoReconciler(); } + + @Bean JdtDataQuerySemanticTokensProvider jpqlJdtSemanticTokensProvider(JpqlSemanticTokens provider, JpqlSupportState supportState) { + return new JdtDataQuerySemanticTokensProvider(provider, supportState); + } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringDataConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringDataConfig.java new file mode 100644 index 000000000..72c7b2081 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringDataConfig.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.app; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpqlSemanticTokens; +import org.springframework.ide.vscode.boot.java.data.jpa.queries.JpqlSupportState; +import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; + +@Configuration(proxyBeanMethods = false) +public class SpringDataConfig { + + @Bean + JpqlSemanticTokens jpqlSemanticTokens() { + return new JpqlSemanticTokens(); + } + + @Bean + JpqlSupportState jpqlSupportState(SimpleLanguageServer server, ProjectObserver projectObserver, BootJavaConfig config) { + return new JpqlSupportState(server, projectObserver, config); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java index fbec4e29f..1e19ba017 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java @@ -62,6 +62,7 @@ import org.springframework.ide.vscode.commons.languageserver.composable.Language import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler; import org.springframework.ide.vscode.commons.languageserver.util.CodeLensHandler; import org.springframework.ide.vscode.commons.languageserver.util.DocumentHighlightHandler; @@ -111,6 +112,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent private BootJavaReconcileEngine reconcileEngine; private BootJavaCodeActionProvider codeActionProvider; private DocumentSymbolHandler docSymbolProvider; + private JdtSemanticTokensHandler semanticTokensHandler; private SpringProcessTracker liveProcessTracker; @@ -183,6 +185,11 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent codeActionProvider = appContext.getBean(BootJavaCodeActionProvider.class); + Map jdtSemanticTokensProviders = appContext.getBeansOfType(JdtSemanticTokensProvider.class); + if (!jdtSemanticTokensProviders.isEmpty()) { + semanticTokensHandler = new JdtSemanticTokensHandler(cuCache, projectFinder, jdtSemanticTokensProviders.values()); + } + config.addListener(ignore -> { log.info("update live process tracker settings - start"); @@ -353,5 +360,10 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent return Optional.ofNullable(codeActionProvider); } + @Override + public Optional getSemanticTokensHandler() { + return Optional.ofNullable(semanticTokensHandler); + } + } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensHandler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensHandler.java new file mode 100644 index 000000000..bd1c932ee --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensHandler.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java; + +import java.net.URI; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.lsp4j.DocumentFilter; +import org.eclipse.lsp4j.SemanticTokens; +import org.eclipse.lsp4j.SemanticTokensLegend; +import org.eclipse.lsp4j.SemanticTokensParams; +import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; +import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache; +import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensUtils; +import org.springframework.ide.vscode.commons.util.text.LanguageId; + +public class JdtSemanticTokensHandler implements SemanticTokensHandler { + + private final CompilationUnitCache cuCache; + private final JavaProjectFinder projectFinder; + private final Collection tokenProviders; + private final SemanticTokensLegend legend; + + public JdtSemanticTokensHandler(CompilationUnitCache cuCache, JavaProjectFinder projectFinder, Collection tokenProviders) { + this.cuCache = cuCache; + this.projectFinder = projectFinder; + this.tokenProviders = tokenProviders; + this.legend = new SemanticTokensLegend( + tokenProviders.stream().flatMap(tp -> tp.getTokenTypes().stream()).distinct().collect(Collectors.toList()), + tokenProviders.stream().flatMap(tp -> tp.getTokenModifiers().stream()).distinct().collect(Collectors.toList()) + ); + } + + @Override + public SemanticTokensWithRegistrationOptions getCapability() { + SemanticTokensWithRegistrationOptions capabilities = new SemanticTokensWithRegistrationOptions(); + DocumentFilter documentFilter = new DocumentFilter(); + documentFilter.setLanguage(LanguageId.JAVA.getId()); + capabilities.setDocumentSelector(List.of(documentFilter)); + capabilities.setFull(true); + capabilities.setLegend(legend); + return capabilities; + } + + @Override + public SemanticTokens semanticTokensFull(SemanticTokensParams params, CancelChecker cancelChecker) { + Optional optProject = projectFinder.find(params.getTextDocument()); + if (optProject.isPresent()) { + IJavaProject jp = optProject.get(); + List applicableTokenProviders = tokenProviders.stream().filter(tp -> tp.isApplicable(jp)).collect(Collectors.toList()); + if (!applicableTokenProviders.isEmpty()) { + return cuCache.withCompilationUnit(jp, URI.create(params.getTextDocument().getUri()), cu -> computeTokens(applicableTokenProviders, cu)); + } + } + return new SemanticTokens(); + } + + private SemanticTokens computeTokens(List applicableTokenProviders, CompilationUnit cu) { + List tokensData = applicableTokenProviders.stream().map(tp -> tp.computeTokens(cu)).flatMap(t -> t.stream()).collect(Collectors.toList()); + return new SemanticTokens(SemanticTokensUtils.mapTokensDataToLsp(tokensData, legend, offset -> cu.getLineNumber(offset) - 1, cu::getColumnNumber)); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensProvider.java new file mode 100644 index 000000000..5f1d92a36 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensProvider.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java; + +import java.util.Collections; +import java.util.List; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; + +public interface JdtSemanticTokensProvider { + + List getTokenTypes(); + default List getTokenModifiers() { return Collections.emptyList(); } + List computeTokens(CompilationUnit cu); + boolean isApplicable(IJavaProject project); + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JdtDataQuerySemanticTokensProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JdtDataQuerySemanticTokensProvider.java new file mode 100644 index 000000000..9e17f0117 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JdtDataQuerySemanticTokensProvider.java @@ -0,0 +1,140 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.Annotation; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.IAnnotationBinding; +import org.eclipse.jdt.core.dom.IMemberValuePairBinding; +import org.eclipse.jdt.core.dom.IMethodBinding; +import org.eclipse.jdt.core.dom.MemberValuePair; +import org.eclipse.jdt.core.dom.MethodInvocation; +import org.eclipse.jdt.core.dom.NormalAnnotation; +import org.eclipse.jdt.core.dom.SingleMemberAnnotation; +import org.eclipse.jdt.core.dom.StringLiteral; +import org.springframework.ide.vscode.boot.java.JdtSemanticTokensProvider; +import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.java.SpringProjectUtil; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; + +public class JdtDataQuerySemanticTokensProvider implements JdtSemanticTokensProvider { + + private static final String QUERY = "Query"; + private static final String FQN_QUERY = "org.springframework.data.jpa.repository." + QUERY; + + private final JpqlSemanticTokens provider; + private final JpqlSupportState supportState; + + public JdtDataQuerySemanticTokensProvider(JpqlSemanticTokens provider, JpqlSupportState supportState) { + this.provider = provider; + this.supportState = supportState; + } + + @Override + public List getTokenTypes() { + return provider.getTokenTypes(); + } + + @Override + public List computeTokens(CompilationUnit cu) { + List tokensData = new ArrayList<>(); + cu.accept(new ASTVisitor() { + + @Override + public boolean visit(NormalAnnotation a) { + if (isQueryAnnotation(a)) { + Expression queryValueNode = ((List) a.values()).stream() + .filter(MemberValuePair.class::isInstance) + .map(MemberValuePair.class::cast) + .filter(p -> "value".equals(p.getName().getIdentifier())) + .findFirst().map(p -> p.getValue()) + .get(); + if (queryValueNode instanceof StringLiteral) { + IAnnotationBinding annotationBinding = a.resolveAnnotationBinding(); + String query = getJpaQuery(annotationBinding); + if (query != null && !query.isBlank()) { + int valueOffset = queryValueNode.getStartPosition() + 1; + tokensData.addAll(provider.computeTokens(query, valueOffset)); + } + } + } + return false; + } + + @Override + public boolean visit(SingleMemberAnnotation a) { + if (isQueryAnnotation(a) && a.getValue() instanceof StringLiteral) { + IAnnotationBinding annotationBinding = a.resolveAnnotationBinding(); + String query = getJpaQuery(annotationBinding); + if (query != null && !query.isBlank()) { + int valueOffset = a.getValue().getStartPosition() + 1; + tokensData.addAll(provider.computeTokens(query, valueOffset)); + } + } + return false; + } + + @Override + public boolean visit(MethodInvocation node) { + if ("createQuery".equals(node.getName().getIdentifier()) && node.arguments().size() <= 2 && node.arguments().get(0) instanceof StringLiteral queryExpr) { + IMethodBinding methodBinding = node.resolveMethodBinding(); + if ("jakarta.persistence.EntityManager".equals(methodBinding.getDeclaringClass().getQualifiedName())) { + if (methodBinding.getParameterTypes().length <= 2 && "java.lang.String".equals(methodBinding.getParameterTypes()[0].getQualifiedName())) { + tokensData.addAll(provider.computeTokens(queryExpr.getLiteralValue(), queryExpr.getStartPosition() + 1)); + } + } + } + return super.visit(node); + } + + }); + + return tokensData; + } + + private static boolean isQueryAnnotation(Annotation a) { + return FQN_QUERY.equals(a.getTypeName().getFullyQualifiedName()) + || QUERY.equals(a.getTypeName().getFullyQualifiedName()); + } + + private static String getJpaQuery(IAnnotationBinding annotationBinding) { + if (annotationBinding != null && annotationBinding.getAnnotationType() != null) { + if (FQN_QUERY.equals(annotationBinding.getAnnotationType().getQualifiedName())) { + String query = null; + boolean isNative = false; + for (IMemberValuePairBinding pair : annotationBinding.getAllMemberValuePairs()) { + switch (pair.getName()) { + case "value": + query = (String) pair.getValue(); + break; + case "nativeQuery": + isNative = (Boolean) pair.getValue(); + break; + default: + } + } + return isNative ? null : query; + } + } + return null; + } + + @Override + public boolean isApplicable(IJavaProject project) { + return supportState.isEnabled() && SpringProjectUtil.hasDependencyStartingWith(project, "spring-data-jpa", null); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpaQueryPropertiesLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpaQueryPropertiesLanguageServerComponents.java new file mode 100644 index 000000000..af902bd12 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpaQueryPropertiesLanguageServerComponents.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import java.util.Optional; +import java.util.Set; + +import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents; +import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService; +import org.springframework.ide.vscode.commons.util.text.LanguageId; + +public class JpaQueryPropertiesLanguageServerComponents implements LanguageServerComponents { + + private final QueryPropertiesSemanticTokensHandler semanticTokensHandler; + + public JpaQueryPropertiesLanguageServerComponents(SimpleTextDocumentService documents, JavaProjectFinder projectsFinder, JpqlSemanticTokens jpqlSemanticTokensProvider, JpqlSupportState supportState) { + this.semanticTokensHandler = new QueryPropertiesSemanticTokensHandler(documents, projectsFinder, jpqlSemanticTokensProvider, supportState); + } + + @Override + public Set getInterestingLanguages() { + return Set.of(LanguageId.JPA_QUERY_PROPERTIES); + } + + @Override + public Optional getSemanticTokensHandler() { + return Optional.of(semanticTokensHandler); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSemanticTokens.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSemanticTokens.java new file mode 100644 index 000000000..1a58c6475 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSemanticTokens.java @@ -0,0 +1,147 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensDataProvider; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlBaseListener; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlLexer; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlParser; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlParser.Collection_valued_fieldContext; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlParser.Entity_nameContext; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlParser.Entity_type_literalContext; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlParser.Single_valued_object_fieldContext; +import org.springframework.ide.vscode.jpql.antlr.parser.JpqlParser.State_fieldContext; + +public class JpqlSemanticTokens implements SemanticTokensDataProvider { + + private static List TOKEN_TYPES = List.of("keyword", "type", "class", "string", "number", "operator", + "variable", "method", "modifier", "regexp"); + + @Override + public List getTokenTypes() { + return TOKEN_TYPES; + } + + @Override + public List computeTokens(String text, int initialOffset) { + List tokens = new ArrayList<>(); + JpqlLexer lexer = new JpqlLexer(CharStreams.fromString(text)); + CommonTokenStream antlrTokens = new CommonTokenStream(lexer); + JpqlParser parser = new JpqlParser(antlrTokens); + HashSet coloredTokens = new HashSet<>(); + parser.addParseListener(new JpqlBaseListener() { + + private void addToken(Token token, String tokenType) { + tokens.add(new SemanticTokenData(token.getStartIndex() + initialOffset, + token.getStartIndex() + token.getText().length() + initialOffset, tokenType, new String[0])); + coloredTokens.add(token); + } + + private void processTerminalNode(TerminalNode node) { + if (coloredTokens.contains(node.getSymbol())) { + return; + } + int type = node.getSymbol().getType(); + switch (type) { + case JpqlParser.STRINGLITERAL: + case JpqlParser.CHARACTER: + addToken(node.getSymbol(), "string"); + break; + case JpqlParser.LONGLITERAL: + case JpqlParser.INTLITERAL: + case JpqlParser.FLOATLITERAL: + addToken(node.getSymbol(), "number"); + break; + case JpqlParser.IDENTIFICATION_VARIABLE: + addToken(node.getSymbol(), "variable"); + break; + case JpqlParser.JAVASTRINGLITERAL: + addToken(node.getSymbol(), "class"); + break; + case JpqlParser.EQUAL: + case JpqlParser.NOT_EQUAL: + addToken(node.getSymbol(), "operator"); + break; + case JpqlParser.WS: + break; + case JpqlParser.SPEL: + addToken(node.getSymbol(), "regexp"); + break; + default: + if (JpqlParser.WS < type && type <= JpqlParser.WHERE) { + addToken(node.getSymbol(), "keyword"); + } else { + addToken(node.getSymbol(), "modifier"); + } + } + } + + @Override + public void enterState_field(State_fieldContext ctx) { + if (!coloredTokens.contains(ctx.getStart())) { + addToken(ctx.getStart(), "method"); + } + } + + @Override + public void enterSingle_valued_object_field(Single_valued_object_fieldContext ctx) { + if (!coloredTokens.contains(ctx.getStart())) { + addToken(ctx.getStart(), "method"); + } + } + + @Override + public void enterCollection_valued_field(Collection_valued_fieldContext ctx) { + if (!coloredTokens.contains(ctx.getStart())) { + addToken(ctx.getStart(), "method"); + } + } + + @Override + public void enterEntity_name(Entity_nameContext ctx) { + if (!coloredTokens.contains(ctx.getStart())) { + addToken(ctx.getStart(), "class"); + } + } + + @Override + public void enterEntity_type_literal(Entity_type_literalContext ctx) { + if (!coloredTokens.contains(ctx.getStart())) { + addToken(ctx.getStart(), "type"); + } + } + + @Override + public void visitTerminal(TerminalNode node) { + processTerminalNode(node); + } + + @Override + public void visitErrorNode(ErrorNode node) { + processTerminalNode(node); + } + + }); + parser.ql_statement(); + return tokens; + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSupportState.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSupportState.java new file mode 100644 index 000000000..6a91d0496 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSupportState.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import org.springframework.ide.vscode.boot.app.BootJavaConfig; +import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; + +public final class JpqlSupportState { + + private final SimpleLanguageServer server; + private boolean enabled; + + public JpqlSupportState(SimpleLanguageServer server, ProjectObserver projectObserver, BootJavaConfig config) { + this(server, projectObserver, config, config.isJpqlEnabled()); + } + + public JpqlSupportState(SimpleLanguageServer server, ProjectObserver projectObserver, BootJavaConfig config, boolean enabled) { + this.server = server; + this.enabled = enabled; + config.addListener(v -> setEnabled(config.isJpqlEnabled())); + projectObserver.addListener(ProjectObserver.onAny(jp -> server.getAsync().execute(() -> server.getClient().refreshSemanticTokens()))); + } + + public synchronized boolean isEnabled() { + return enabled; + } + + private synchronized void setEnabled(boolean enabled) { + if (this.enabled != enabled) { + this.enabled = enabled; + server.getAsync().execute(() -> server.getClient().refreshSemanticTokens()); + } + } +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/QueryPropertiesSemanticTokensHandler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/QueryPropertiesSemanticTokensHandler.java new file mode 100644 index 000000000..552b805ad --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/QueryPropertiesSemanticTokensHandler.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.eclipse.lsp4j.DocumentFilter; +import org.eclipse.lsp4j.SemanticTokens; +import org.eclipse.lsp4j.SemanticTokensLegend; +import org.eclipse.lsp4j.SemanticTokensParams; +import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.java.SpringProjectUtil; +import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensHandler; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokensUtils; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService; +import org.springframework.ide.vscode.commons.util.BadLocationException; +import org.springframework.ide.vscode.commons.util.text.LanguageId; +import org.springframework.ide.vscode.commons.util.text.TextDocument; +import org.springframework.ide.vscode.java.properties.antlr.parser.AntlrParser; +import org.springframework.ide.vscode.java.properties.parser.ParseResults; +import org.springframework.ide.vscode.java.properties.parser.PropertiesAst; +import org.springframework.ide.vscode.java.properties.parser.PropertiesAst.Value; + +public class QueryPropertiesSemanticTokensHandler implements SemanticTokensHandler { + + private static final Logger log = LoggerFactory.getLogger(QueryPropertiesSemanticTokensHandler.class); + + private final JavaProjectFinder projectFinder; + private final SimpleTextDocumentService documents; + private final JpqlSemanticTokens tokensProvider; + private final JpqlSupportState supportState; + + public QueryPropertiesSemanticTokensHandler(SimpleTextDocumentService documents, JavaProjectFinder projectFinder, JpqlSemanticTokens jpqlTokensProvider, JpqlSupportState supportState) { + this.documents = documents; + this.projectFinder = projectFinder; + this.tokensProvider = jpqlTokensProvider; + this.supportState = supportState; + } + + @Override + public SemanticTokensWithRegistrationOptions getCapability() { + SemanticTokensWithRegistrationOptions capabilities = new SemanticTokensWithRegistrationOptions(); + DocumentFilter documentFilter = new DocumentFilter(); + documentFilter.setLanguage(LanguageId.JPA_QUERY_PROPERTIES.getId()); + capabilities.setDocumentSelector(List.of(documentFilter)); + capabilities.setFull(true); + capabilities.setLegend(new SemanticTokensLegend(tokensProvider.getTokenTypes(), tokensProvider.getTypeModifiers())); + return capabilities; + } + + @Override + public SemanticTokens semanticTokensFull(SemanticTokensParams params, CancelChecker cancelChecker) { + if (!supportState.isEnabled()) { + return new SemanticTokens(); + } + Optional optProject = projectFinder.find(params.getTextDocument()); + if (optProject.isPresent() && SpringProjectUtil.hasDependencyStartingWith(optProject.get(), "spring-data-jpa", null)) { + TextDocument doc = documents.getLatestSnapshot(params.getTextDocument().getUri()); + if (doc != null) { + AntlrParser propertiesParser = new AntlrParser(); + ParseResults result = propertiesParser.parse(doc.get()); + List data = new ArrayList<>(); + for (PropertiesAst.KeyValuePair node : result.ast.getNodes(PropertiesAst.KeyValuePair.class)) { + Value value = node.getValue(); + if (value != null) { + data.addAll(tokensProvider.computeTokens(value.decode(), value.getOffset())); + } + } + Collections.sort(data); + SemanticTokensLegend legend = new SemanticTokensLegend(tokensProvider.getTokenTypes(), tokensProvider.getTypeModifiers()); + return new SemanticTokens(SemanticTokensUtils.mapTokensDataToLsp(data, legend, t -> { + try { + return doc.getLineOfOffset(t); + } catch (BadLocationException e) { + log.error("", e); + } + return -1; + }, o -> { + try { + return o - doc.getLineOffset(doc.getLineOfOffset(o)); + } catch (BadLocationException e) { + log.error("", e); + } + return -1; + })); + } + } + return SemanticTokensHandler.super.semanticTokensFull(params, cancelChecker); + } + + +} diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JdtDataQuerySemanticTokensProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JdtDataQuerySemanticTokensProviderTest.java new file mode 100644 index 000000000..375658186 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JdtDataQuerySemanticTokensProviderTest.java @@ -0,0 +1,212 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.nio.file.Paths; +import java.util.List; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Import; +import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest; +import org.springframework.ide.vscode.boot.bootiful.HoverTestConf; +import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; +import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject; +import org.springframework.ide.vscode.project.harness.ProjectsHarness; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@BootLanguageServerTest +@Import(HoverTestConf.class) +public class JdtDataQuerySemanticTokensProviderTest { + + @Autowired JdtDataQuerySemanticTokensProvider provider; + + private ProjectsHarness projects = ProjectsHarness.INSTANCE; + + private MavenJavaProject jp; + + @BeforeEach + public void setup() throws Exception { + jp = projects.mavenProject("spring-modulith-example-full"); + } + + @Test + void singleMemberAnnotation() throws Exception { + String source = """ + package my.package + + import org.springframework.data.jpa.repository.Query; + + public interface OwnerRepository { + + @Query("SELECT DISTINCT owner FROM Owner owner") + void findByLastName(); + } + """; + + String uri = Paths.get(jp.getLocationUri()).resolve("src/main/resource/my/package/OwnerRepository.java").toUri().toASCIIString(); + CompilationUnit cu = CompilationUnitCache.parse2(source.toCharArray(), uri, "OwnerRepository.java", jp); + + assertThat(cu).isNotNull(); + + List tokens = provider.computeTokens(cu); + + SemanticTokenData token = tokens.get(0); + assertThat(token).isEqualTo(new SemanticTokenData(120, 126, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("SELECT"); + + token = tokens.get(1); + assertThat(token).isEqualTo(new SemanticTokenData(127, 135, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("DISTINCT"); + + token = tokens.get(2); + assertThat(token).isEqualTo(new SemanticTokenData(136, 141, "variable", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("owner"); + + token = tokens.get(3); + assertThat(token).isEqualTo(new SemanticTokenData(142, 146, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("FROM"); + + token = tokens.get(4); + assertThat(token).isEqualTo(new SemanticTokenData(147, 152, "class", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("Owner"); + + token = tokens.get(5); + assertThat(token).isEqualTo(new SemanticTokenData(153, 158, "variable", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("owner"); + } + + @Test + void normalAnnotation() throws Exception { + String source = """ + package my.package + + import org.springframework.data.jpa.repository.Query; + + public interface OwnerRepository { + + @Query(value = "SELECT DISTINCT owner FROM Owner owner") + void findByLastName(); + } + """; + + String uri = Paths.get(jp.getLocationUri()).resolve("src/main/resource/my/package/OwnerRepository.java").toUri().toASCIIString(); + CompilationUnit cu = CompilationUnitCache.parse2(source.toCharArray(), uri, "OwnerRepository.java", jp); + + assertThat(cu).isNotNull(); + + List tokens = provider.computeTokens(cu); + + SemanticTokenData token = tokens.get(0); + assertThat(token).isEqualTo(new SemanticTokenData(128, 134, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("SELECT"); + + token = tokens.get(1); + assertThat(token).isEqualTo(new SemanticTokenData(135, 143, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("DISTINCT"); + + token = tokens.get(2); + assertThat(token).isEqualTo(new SemanticTokenData(144, 149, "variable", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("owner"); + + token = tokens.get(3); + assertThat(token).isEqualTo(new SemanticTokenData(150, 154, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("FROM"); + + token = tokens.get(4); + assertThat(token).isEqualTo(new SemanticTokenData(155, 160, "class", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("Owner"); + + token = tokens.get(5); + assertThat(token).isEqualTo(new SemanticTokenData(161, 166, "variable", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("owner"); + } + + @Test + void createQueryMethod() throws Exception { + String source = """ + package my.package + + import jakarta.persistence.EntityManager; + + public interface OwnerRepository { + + default void findByLastName(EntityManager manager) { + manager.createQuery("SELECT DISTINCT owner FROM Owner owner") + } + } + """; + + String uri = Paths.get(jp.getLocationUri()).resolve("src/main/resource/my/package/OwnerRepository.java").toUri().toASCIIString(); + CompilationUnit cu = CompilationUnitCache.parse2(source.toCharArray(), uri, "OwnerRepository.java", jp); + + assertThat(cu).isNotNull(); + + List tokens = provider.computeTokens(cu); + + SemanticTokenData token = tokens.get(0); + assertThat(token).isEqualTo(new SemanticTokenData(176, 182, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("SELECT"); + + token = tokens.get(1); + assertThat(token).isEqualTo(new SemanticTokenData(183, 191, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("DISTINCT"); + + token = tokens.get(2); + assertThat(token).isEqualTo(new SemanticTokenData(192, 197, "variable", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("owner"); + + token = tokens.get(3); + assertThat(token).isEqualTo(new SemanticTokenData(198, 202, "keyword", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("FROM"); + + token = tokens.get(4); + assertThat(token).isEqualTo(new SemanticTokenData(203, 208, "class", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("Owner"); + + token = tokens.get(5); + assertThat(token).isEqualTo(new SemanticTokenData(209, 214, "variable", new String[0])); + assertThat(source.substring(token.start(), token.end())).isEqualTo("owner"); + } + + @Test + void nativeQuery() throws Exception { + String source = """ + package my.package + + import org.springframework.data.jpa.repository.Query; + + public interface OwnerRepository { + + @Query(value = "SELECT DISTINCT owner FROM Owner owner", nativeQuery = true) + void findByLastName(); + } + """; + + String uri = Paths.get(jp.getLocationUri()).resolve("src/main/resource/my/package/OwnerRepository.java").toUri().toASCIIString(); + CompilationUnit cu = CompilationUnitCache.parse2(source.toCharArray(), uri, "OwnerRepository.java", jp); + + assertThat(cu).isNotNull(); + + List tokens = provider.computeTokens(cu); + + assertThat(tokens.size()).isZero(); + + } + +} diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSemanticTokensTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSemanticTokensTest.java new file mode 100644 index 000000000..ef5face96 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/JpqlSemanticTokensTest.java @@ -0,0 +1,115 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.data.jpa.queries; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.springframework.ide.vscode.commons.languageserver.semantic.tokens.SemanticTokenData; + +public class JpqlSemanticTokensTest { + + private JpqlSemanticTokens provider = new JpqlSemanticTokens(); + + @Test + void simpleQuery_1() { + List tokens = provider.computeTokens("SELECT owner FROM Owner owner", 0); + assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); + assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 12, "variable", new String[0])); + assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(13, 17, "keyword", new String[0])); + assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(18, 23, "class", new String[0])); + assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(24, 29, "variable", new String[0])); + + assertThat(tokens.size()).isEqualTo(5); + } + + @Test + void initialOffset() { + List tokens = provider.computeTokens("SELECT owner FROM Owner owner", 3); + assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(3, 9, "keyword", new String[0])); + assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(10, 15, "variable", new String[0])); + assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(16, 20, "keyword", new String[0])); + assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(21, 26, "class", new String[0])); + assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(27, 32, "variable", new String[0])); + + assertThat(tokens.size()).isEqualTo(5); + } + + @Test + void query_with_conflicting_groupby() { + List tokens = provider.computeTokens("SELECT g FROM Group g GROUP BY g.name", 0); + assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); + assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 8, "variable", new String[0])); + assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(9, 13, "keyword", new String[0])); + assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(14, 19, "class", new String[0])); + assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(20, 21, "variable", new String[0])); + assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(22, 27, "keyword", new String[0])); + assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(28, 30, "keyword", new String[0])); + assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(31, 32, "variable", new String[0])); + assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(32, 33, "modifier", new String[0])); + assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(33, 37, "method", new String[0])); + + assertThat(tokens.size()).isEqualTo(10); + } + + @Test + void query_with_parameter() { + List tokens = provider.computeTokens("SELECT DISTINCT owner FROM Owner owner left join owner.pets WHERE owner.lastName LIKE :lastName%", 0); + assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // SELECT + assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 15, "keyword", new String[0])); // DISTINCT + assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(16, 21, "variable", new String[0])); // owner + assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(22, 26, "keyword", new String[0])); // FROM + assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(27, 32, "class", new String[0])); // Owner + assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(33, 38, "variable", new String[0])); // owner + assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(39, 43, "keyword", new String[0])); // left + assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(44, 48, "keyword", new String[0])); // join + assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(50, 55, "variable", new String[0])); // owner + assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(55, 56, "modifier", new String[0])); // . + assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(56, 60, "method", new String[0])); // pets + assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(61, 66, "keyword", new String[0])); // WHERE + assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(67, 72, "variable", new String[0])); // owner + assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(72, 73, "modifier", new String[0])); // . + assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(73, 81, "method", new String[0])); // lastName + assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(82, 86, "keyword", new String[0])); // LIKE + assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(87, 88, "modifier", new String[0])); // : + assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(88, 96, "variable", new String[0])); // lastName + assertThat(tokens.get(18)).isEqualTo(new SemanticTokenData(96, 97, "modifier", new String[0])); // lastName + + assertThat(tokens.size()).isEqualTo(19); + } + + @Test + void query_with_SPEL() { + List tokens = provider.computeTokens("SELECT owner FROM Owner owner left join fetch owner.pets WHERE owner.id =:${id}", 0); + assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // SELECT + assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 12, "variable", new String[0])); // owner + assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(13, 17, "keyword", new String[0])); // FROM + assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(18, 23, "class", new String[0])); // Owner + assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(24, 29, "variable", new String[0])); // owner + assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(30, 34, "keyword", new String[0])); // left + assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(35, 39, "keyword", new String[0])); // join + assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch + assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner + assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "modifier", new String[0])); // . + assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets + assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE + assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner + assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "modifier", new String[0])); // . + assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id + assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // = + assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "modifier", new String[0])); // : + assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 79, "regexp", new String[0])); // ${id} + + assertThat(tokens.size()).isEqualTo(18); + } +} diff --git a/vscode-extensions/vscode-spring-boot/lib/Main.ts b/vscode-extensions/vscode-spring-boot/lib/Main.ts index 51769e1b2..44a3149d3 100644 --- a/vscode-extensions/vscode-spring-boot/lib/Main.ts +++ b/vscode-extensions/vscode-spring-boot/lib/Main.ts @@ -27,6 +27,7 @@ const YAML_LANGUAGE_ID = "spring-boot-properties-yaml"; const JAVA_LANGUAGE_ID = "java"; const XML_LANGUAGE_ID = "xml"; const FACTORIES_LANGUAGE_ID = "spring-factories"; +const JPA_QUERY_PROPERTIES_LANGUAGE_ID = "jpa-query-properties"; const STOP_ASKING = "Stop Asking"; @@ -122,6 +123,10 @@ export function activate(context: ExtensionContext): Thenable { { language: FACTORIES_LANGUAGE_ID, scheme: 'file' + }, + { + language: JPA_QUERY_PROPERTIES_LANGUAGE_ID, + pattern: "**/jpa-named-queries.properties" } ], synchronize: { diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index 5c3226984..3cb89a509 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -69,6 +69,16 @@ "*.factories" ], "configuration": "./properties-support/language-configuration.json" + }, + { + "id": "jpa-query-properties", + "aliases": [ + "JPA Query Properties" + ], + "filenamePatterns": [ + "jpa-named-queries.properties" + ], + "configuration": "./properties-support/language-configuration.json" } ], "menus": { @@ -300,6 +310,11 @@ ], "description": "The path to a shared properties metadata JSON file." }, + "boot-java.jpql": { + "type": "boolean", + "default": true, + "description": "JPA Query language support" + }, "boot-java.change-detection.on": { "type": "boolean", "default": false, @@ -1137,10 +1152,15 @@ "scopeName": "source.spring-boot-properties", "path": "./properties-support/spring-boot-properties.tmLanguage.json" }, + { + "language": "jpa-query-properties", + "scopeName": "source.jpa-query-properties", + "path": "./properties-support/jpa-query-properties.tmLanguage.json" + }, { "language": "spring-factories", "scopeName": "source.spring-factories", - "path": "./properties-support/spring-boot-properties.tmLanguage.json" + "path": "./properties-support/spring-factories.tmLanguage.json" } ] }, diff --git a/vscode-extensions/vscode-spring-boot/properties-support/jpa-query-properties.tmLanguage.json b/vscode-extensions/vscode-spring-boot/properties-support/jpa-query-properties.tmLanguage.json new file mode 100644 index 000000000..42fa7de49 --- /dev/null +++ b/vscode-extensions/vscode-spring-boot/properties-support/jpa-query-properties.tmLanguage.json @@ -0,0 +1,10 @@ +{ + "name": "JPA Query Properties", + "scopeName": "source.jpa-query-properties", + "patterns": [ + { + "comment": "source.java-properties is defined in vscode-java", + "include": "source.java-properties" + } + ] + } \ No newline at end of file diff --git a/vscode-extensions/vscode-spring-boot/properties-support/spring-factories.tmLanguage.json b/vscode-extensions/vscode-spring-boot/properties-support/spring-factories.tmLanguage.json new file mode 100644 index 000000000..0ae5030e1 --- /dev/null +++ b/vscode-extensions/vscode-spring-boot/properties-support/spring-factories.tmLanguage.json @@ -0,0 +1,10 @@ +{ + "name": "Spring Factories", + "scopeName": "source.spring-factories", + "patterns": [ + { + "comment": "source.java-properties is defined in vscode-java", + "include": "source.java-properties" + } + ] + } \ No newline at end of file