/*
 * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

/**
 * This package contains the Hermes features (except the parser itself): semantic and grammatical
 * validations, content assist support, calculating the query result type or the possible type of
 * an input parameter, refactoring tools.
 */
package org.eclipse.persistence.jpa.jpql;
