From 7fa5766eb78c542d54f7f7dfff4757e607ec30fd Mon Sep 17 00:00:00 2001 From: tle Date: Tue, 20 Dec 2011 23:21:27 +0000 Subject: Hermes JPQL parser 2 integration (needs EclipseLink 2.4.0) - patch from Pascal --- .../org.eclipse.jpt.jpa.core/META-INF/MANIFEST.MF | 5 +- .../src/org/eclipse/jpt/jpa/core/JpaPlatform.java | 58 +-- .../core/internal/AbstractJpaJpqlQueryHelper.java | 99 +++++ .../core/internal/GenericJpaJpqlQueryHelper.java | 50 +++ .../jpt/jpa/core/internal/GenericJpaPlatform.java | 16 +- .../core/internal/GenericJpaPlatformFactory.java | 21 +- .../jpa1/context/java/GenericJavaNamedQuery.java | 7 +- .../jpa1/context/orm/GenericOrmNamedQuery.java | 6 +- .../jpa2/Generic2_0JpaJpqlQueryHelper.java | 51 +++ .../jpa2/Generic2_0JpaPlatformFactory.java | 15 +- .../context/java/GenericJavaNamedQuery2_0.java | 7 +- .../jpa2/context/orm/GenericOrmNamedQuery2_0.java | 8 +- .../jpa/core/internal/jpql/ClassConstructor.java | 143 ------- .../jpt/jpa/core/internal/jpql/IJpaType.java | 38 -- .../jpa/core/internal/jpql/JavaConstructor.java | 99 ----- .../jpt/jpa/core/internal/jpql/JavaType.java | 246 ------------ .../core/internal/jpql/JavaTypeDeclaration.java | 271 ------------- .../jpt/jpa/core/internal/jpql/JpaConstructor.java | 140 ------- .../jpt/jpa/core/internal/jpql/JpaEmbeddable.java | 63 --- .../jpt/jpa/core/internal/jpql/JpaEntity.java | 110 ------ .../jpa/core/internal/jpql/JpaJpqlQueryHelper.java | 240 ----------- .../jpt/jpa/core/internal/jpql/JpaManagedType.java | 134 ------- .../core/internal/jpql/JpaManagedTypeProvider.java | 293 -------------- .../core/internal/jpql/JpaMappedSuperclass.java | 63 --- .../jpt/jpa/core/internal/jpql/JpaMapping.java | 269 ------------- .../jpa/core/internal/jpql/JpaNullManagedType.java | 112 ------ .../jpa/core/internal/jpql/JpaPersistenceUnit.java | 40 -- .../jpt/jpa/core/internal/jpql/JpaQuery.java | 115 ------ .../jpt/jpa/core/internal/jpql/JpaType.java | 430 -------------------- .../jpa/core/internal/jpql/JpaTypeDeclaration.java | 105 ----- .../jpa/core/internal/jpql/JpaTypeRepository.java | 404 ------------------- .../jpt/jpa/core/internal/jpql/SimpleType.java | 138 ------- .../jpt/jpa/core/jpql/JpaJpqlQueryHelper.java | 256 ++++++++++++ .../jpt/jpa/core/jpql/spi/ClassConstructor.java | 148 +++++++ .../jpt/jpa/core/jpql/spi/GenericJpaMapping.java | 42 ++ .../jpa/core/jpql/spi/GenericMappingBuilder.java | 48 +++ .../eclipse/jpt/jpa/core/jpql/spi/IJpaType.java | 43 ++ .../jpt/jpa/core/jpql/spi/JavaConstructor.java | 104 +++++ .../eclipse/jpt/jpa/core/jpql/spi/JavaType.java | 252 ++++++++++++ .../jpt/jpa/core/jpql/spi/JavaTypeDeclaration.java | 276 +++++++++++++ .../jpt/jpa/core/jpql/spi/JpaConstructor.java | 145 +++++++ .../jpt/jpa/core/jpql/spi/JpaEmbeddable.java | 75 ++++ .../eclipse/jpt/jpa/core/jpql/spi/JpaEntity.java | 122 ++++++ .../jpt/jpa/core/jpql/spi/JpaManagedType.java | 179 +++++++++ .../jpa/core/jpql/spi/JpaManagedTypeProvider.java | 297 ++++++++++++++ .../jpt/jpa/core/jpql/spi/JpaMappedSuperclass.java | 75 ++++ .../eclipse/jpt/jpa/core/jpql/spi/JpaMapping.java | 318 +++++++++++++++ .../jpt/jpa/core/jpql/spi/JpaNullManagedType.java | 118 ++++++ .../eclipse/jpt/jpa/core/jpql/spi/JpaQuery.java | 121 ++++++ .../org/eclipse/jpt/jpa/core/jpql/spi/JpaType.java | 437 +++++++++++++++++++++ .../jpt/jpa/core/jpql/spi/JpaTypeDeclaration.java | 110 ++++++ .../jpt/jpa/core/jpql/spi/JpaTypeRepository.java | 409 +++++++++++++++++++ .../eclipse/jpt/jpa/core/jpql/spi/SimpleType.java | 144 +++++++ .../.classpath | 1 + .../META-INF/MANIFEST.MF | 2 + .../AbstractEclipseLinkJpaJpqlQueryHelper.java | 99 +++++ .../internal/EclipseLink1_1JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink1_1JpaPlatformFactory.java | 19 +- .../internal/EclipseLink1_2JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink1_2JpaPlatformFactory.java | 19 +- .../internal/EclipseLink2_0JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink2_0JpaPlatformFactory.java | 13 +- .../internal/EclipseLink2_1JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink2_1JpaPlatformFactory.java | 31 +- .../internal/EclipseLink2_2JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink2_2JpaPlatformFactory.java | 31 +- .../internal/EclipseLink2_3JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink2_3JpaPlatformFactory.java | 21 +- .../internal/EclipseLink2_4JpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLink2_4JpaPlatformFactory.java | 11 +- .../internal/EclipseLinkJpaJpqlQueryHelper.java | 49 +++ .../internal/EclipseLinkJpaPlatformFactory.java | 23 +- .../core/jpql/spi/EclipseLinkMapping.java | 113 ++++++ .../core/jpql/spi/EclipseLinkMappingBuilder.java | 49 +++ .../org.eclipse.jpt.jpa.ui/META-INF/MANIFEST.MF | 2 +- .../jpql/JpaJpqlContentProposalProvider.java | 49 ++- .../jpql/JpqlCompletionProposalComputer.java | 63 +-- .../ui/internal/jpql/JpqlIdentifierMessages.java | 6 +- .../META-INF/MANIFEST.MF | 1 + .../extension/resource/TestJpaJpqlQueryHelper.java | 86 ++++ .../extension/resource/TestJpaPlatformFactory.java | 19 +- 81 files changed, 4919 insertions(+), 3646 deletions(-) create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaJpqlQueryHelper.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/ClassConstructor.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/IJpaType.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaConstructor.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaType.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaTypeDeclaration.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaConstructor.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEmbeddable.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEntity.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaJpqlQueryHelper.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaManagedType.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaManagedTypeProvider.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaMappedSuperclass.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaMapping.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaNullManagedType.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaPersistenceUnit.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaQuery.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaType.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaTypeDeclaration.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaTypeRepository.java delete mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/SimpleType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/ClassConstructor.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/GenericJpaMapping.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/GenericMappingBuilder.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/IJpaType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JavaConstructor.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JavaType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JavaTypeDeclaration.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaConstructor.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaEmbeddable.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaEntity.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaManagedType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaManagedTypeProvider.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaMappedSuperclass.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaMapping.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaNullManagedType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaQuery.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaTypeDeclaration.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/JpaTypeRepository.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpql/spi/SimpleType.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/AbstractEclipseLinkJpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink1_1JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink1_2JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink2_0JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink2_1JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink2_2JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink2_3JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink2_4JpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLinkJpaJpqlQueryHelper.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/jpql/spi/EclipseLinkMapping.java create mode 100644 jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/jpql/spi/EclipseLinkMappingBuilder.java create mode 100644 jpa/tests/org.eclipse.jpt.jpa.core.tests.extension.resource/src/org/eclipse/jpt/jpa/core/tests/extension/resource/TestJpaJpqlQueryHelper.java diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.jpa.core/META-INF/MANIFEST.MF index d691ef0d6f..bf3b9657c4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/META-INF/MANIFEST.MF +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/META-INF/MANIFEST.MF @@ -25,7 +25,7 @@ Require-Bundle: org.eclipse.core.commands;bundle-version="[3.4.0,4.0.0)", org.eclipse.jst.common.project.facet.core;bundle-version="[1.3.100,2.0.0)", org.eclipse.jst.j2ee;bundle-version="[1.1.200,2.0.0)", org.eclipse.jst.j2ee.core;bundle-version="[1.1.200,2.0.0)", - org.eclipse.persistence.jpa.jpql;bundle-version="[1.0.0, 2.0.0)", + org.eclipse.persistence.jpa.jpql;bundle-version="[2.0.0, 3.0.0)", org.eclipse.wst.common.emf;bundle-version="[1.1.200,2.0.0)", org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.200,2.0.0)", org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)", @@ -63,7 +63,6 @@ Export-Package: org.eclipse.jpt.jpa.core, org.eclipse.jpt.jpa.core.internal.jpa2.resource.java;x-internal:=true, org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.binary;x-internal:=true, org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.source;x-internal:=true, - org.eclipse.jpt.jpa.core.internal.jpql;x-friends:="org.eclipse.jpt.jpa.ui", org.eclipse.jpt.jpa.core.internal.libprov;x-internal:=true, org.eclipse.jpt.jpa.core.internal.libval;x-internal:=true, org.eclipse.jpt.jpa.core.internal.operations;x-internal:=true, @@ -87,6 +86,8 @@ Export-Package: org.eclipse.jpt.jpa.core, org.eclipse.jpt.jpa.core.jpa2.context.persistence.connection, org.eclipse.jpt.jpa.core.jpa2.context.persistence.options, org.eclipse.jpt.jpa.core.jpa2.resource.java, + org.eclipse.jpt.jpa.core.jpql, + org.eclipse.jpt.jpa.core.jpql.spi, org.eclipse.jpt.jpa.core.libprov, org.eclipse.jpt.jpa.core.platform, org.eclipse.jpt.jpa.core.resource, diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaPlatform.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaPlatform.java index 6eae60b1d3..84492737ae 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaPlatform.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaPlatform.java @@ -3,12 +3,14 @@ * 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 http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.jpa.core; +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.common.core.AnnotationProvider; @@ -21,13 +23,13 @@ import org.eclipse.jpt.jpa.core.platform.JpaPlatformDescription; import org.eclipse.jpt.jpa.db.ConnectionProfileFactory; /** - * This interface is to be implemented by a JPA vendor to provide extensions to + * This interface is to be implemented by a JPA vendor to provide extensions to * the core JPA model. The core JPA model will provide functionality for JPA * spec annotations in Java, persistence.xml and mapping * (orm.xml) files. - * The org.eclipse.jpt.jpa.core.generic extension supplies - * resource models for those file types. As another vendor option you - * will have to supply those resource models as well or different ones + * The org.eclipse.jpt.jpa.core.generic extension supplies + * resource models for those file types. As another vendor option you + * will have to supply those resource models as well or different ones * as necessary. In the extension point you actually provide a * {@link JpaPlatformFactory} that will build the JPA platform. *

@@ -40,8 +42,8 @@ import org.eclipse.jpt.jpa.db.ConnectionProfileFactory; * See the org.eclipse.jpt.jpa.core.jpaPlatforms extension point. * @see JpaPlatformFactory * @see JpaPlatformProvider - * - * @version 3.0 + * + * @version 3.1 * @since 2.0 */ public interface JpaPlatform @@ -52,18 +54,18 @@ public interface JpaPlatform * Get the ID for this platform */ String getId(); - + /** * Return the description for this platform */ JpaPlatformDescription getDescription(); - + /** - * Get the version object for this platform. + * Get the version object for this platform. */ Version getJpaVersion(); - - + + // ********** factory ********** /** @@ -121,15 +123,15 @@ public interface JpaPlatform */ Iterable getDefaultJavaAttributeMappingDefinitions(); - + // ********** resource types and definitions ********** - + /** * Return whether the platform supports the specified resource type. * This method is consistent with {@link #getResourceDefinition(JptResourceType)}. */ boolean supportsResourceType(JptResourceType resourceType); - + /** * Return the platform's resource definition for the specified resource type. * The returned definition describes the platform's corresponding context model. @@ -138,15 +140,15 @@ public interface JpaPlatform * This method is consistent with {@link #supportsResourceType(JptResourceType)}. */ ResourceDefinition getResourceDefinition(JptResourceType resourceType); - + /** * Return the most recent supported resource type for the specified content * type. Throw an {@link IllegalArgumentException} if the content type is not * supported by the platform. */ JptResourceType getMostRecentSupportedResourceType(IContentType contentType); - - + + // ********** database ********** /** @@ -162,7 +164,7 @@ public interface JpaPlatform */ EntityGeneratorDatabaseAnnotationNameBuilder getEntityGeneratorDatabaseAnnotationNameBuilder(); - + // ********** platform variation ********** /** @@ -170,21 +172,31 @@ public interface JpaPlatform */ JpaPlatformVariation getJpaVariation(); - + + // ********** Hermes integration ********** + + /** + * Return the helper that integrates into the Hermes parser and that provides functionality + * related to JPQL queries (example: content assist, validation). + * @since 3.1 + */ + JpaJpqlQueryHelper getJpqlQueryHelper(); + + interface Version { - + /** * Return the platform's version. */ String getVersion(); - + /** * Return the highest JPA specification version supported by the platform. * @see JpaFacet#VERSION_1_0 * @see JpaFacet#VERSION_2_0 */ String getJpaVersion(); - + /** * Return whether the platform is compatible with the specified JPA * specification version. diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaJpqlQueryHelper.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaJpqlQueryHelper.java new file mode 100644 index 0000000000..1c44fd11e2 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaJpqlQueryHelper.java @@ -0,0 +1,99 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Oracle - initial API and implementation + * + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.internal; + +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; +import org.eclipse.jpt.jpa.core.jpql.spi.GenericMappingBuilder; +import org.eclipse.jpt.jpa.core.jpql.spi.JpaManagedTypeProvider; + +import org.eclipse.jpt.jpa.core.context.AttributeMapping; +import org.eclipse.jpt.jpa.core.context.NamedQuery; +import org.eclipse.persistence.jpa.jpql.AbstractContentAssistVisitor; +import org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator; +import org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator; +import org.eclipse.persistence.jpa.jpql.DefaultContentAssistVisitor; +import org.eclipse.persistence.jpa.jpql.DefaultGrammarValidator; +import org.eclipse.persistence.jpa.jpql.DefaultJPQLQueryContext; +import org.eclipse.persistence.jpa.jpql.DefaultSemanticValidator; +import org.eclipse.persistence.jpa.jpql.JPQLQueryContext; +import org.eclipse.persistence.jpa.jpql.parser.JPQLGrammar; +import org.eclipse.persistence.jpa.jpql.spi.IMappingBuilder; + +/** + * The default implementation of {@link JpaJpqlQueryHelper} that provides support based on the Java + * Persistence functional specification (version 1.0 and 2.0). + * + * @version 3.1 + * @since 3.1 + * @author Pascal Filion + */ +public abstract class AbstractJpaJpqlQueryHelper extends JpaJpqlQueryHelper { + + /** + * Creates a new AbstractJpaJpqlQueryHelper. + * + * @param jpqlGrammar The grammar that defines how to parse a JPQL query + */ + protected AbstractJpaJpqlQueryHelper(JPQLGrammar jpqlGrammar) { + super(jpqlGrammar); + } + + /** + * {@inheritDoc} + */ + @Override + protected AbstractContentAssistVisitor buildContentAssistVisitor(JPQLQueryContext queryContext) { + return new DefaultContentAssistVisitor(queryContext); + } + + /** + * {@inheritDoc} + */ + @Override + protected AbstractGrammarValidator buildGrammarValidator(JPQLQueryContext queryContext) { + return new DefaultGrammarValidator(queryContext); + } + + /** + * {@inheritDoc} + */ + @Override + protected JPQLQueryContext buildJPQLQueryContext(JPQLGrammar jpqlGrammar) { + return new DefaultJPQLQueryContext(jpqlGrammar); + } + + protected IMappingBuilder buildMappingBuilder() { + return new GenericMappingBuilder(); + } + + /** + * {@inheritDoc} + */ + @Override + public JpaManagedTypeProvider buildProvider(NamedQuery query) { + return new JpaManagedTypeProvider( + query.getJpaProject(), + query.getPersistenceUnit(), + buildMappingBuilder() + ); + } + + /** + * {@inheritDoc} + */ + @Override + protected AbstractSemanticValidator buildSemanticValidator(JPQLQueryContext queryContext) { + return new DefaultSemanticValidator(queryContext); + } +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaJpqlQueryHelper.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaJpqlQueryHelper.java new file mode 100644 index 0000000000..822208847e --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaJpqlQueryHelper.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Oracle - initial API and implementation + * + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.internal; + +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + +import org.eclipse.persistence.jpa.jpql.parser.JPQLGrammar1_0; + +/** + * The default implementation of {@link JpaJpqlQueryHelper} that provides support based on the Java + * Persistence functional specification version 1.0. + * + * @version 3.1 + * @since 3.1 + * @author Pascal Filion + */ +public class GenericJpaJpqlQueryHelper extends AbstractJpaJpqlQueryHelper { + + /** + * The singleton instance of this helper. + */ + private static final JpaJpqlQueryHelper INSTANCE = new GenericJpaJpqlQueryHelper(); + + /** + * Creates a new GenericJpaJpqlQueryHelper. + */ + private GenericJpaJpqlQueryHelper() { + super(JPQLGrammar1_0.instance()); + } + + /** + * Returns the singleton instance of this helper. + * + * @return The singleton instance of this helper + */ + public static JpaJpqlQueryHelper instance() { + return INSTANCE; + } +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatform.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatform.java index 405d0914aa..141a270b2f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatform.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatform.java @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal; +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.common.core.AnnotationProvider; @@ -53,8 +55,10 @@ public class GenericJpaPlatform private final JpaPlatformVariation jpaVariation; + private final JpaJpqlQueryHelper jpqlQueryHelper; + - public GenericJpaPlatform(String id, Version jpaVersion, JpaFactory jpaFactory, AnnotationProvider annotationProvider, JpaPlatformProvider platformProvider, JpaPlatformVariation jpaVariation) { + public GenericJpaPlatform(String id, Version jpaVersion, JpaFactory jpaFactory, AnnotationProvider annotationProvider, JpaPlatformProvider platformProvider, JpaPlatformVariation jpaVariation, JpaJpqlQueryHelper jpqlQueryHelper) { super(); this.id = id; this.jpaVersion = jpaVersion; @@ -62,6 +66,7 @@ public class GenericJpaPlatform this.annotationProvider = annotationProvider; this.jpaVariation = jpaVariation; this.platformProvider = platformProvider; + this.jpqlQueryHelper = jpqlQueryHelper; } @@ -195,4 +200,11 @@ public class GenericJpaPlatform public JpaPlatformVariation getJpaVariation() { return this.jpaVariation; } -} + + + // ********** Hermes integration ********** + + public JpaJpqlQueryHelper getJpqlQueryHelper() { + return jpqlQueryHelper; + } +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatformFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatformFactory.java index c3cacc7ae6..fc25535ca5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatformFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/GenericJpaPlatformFactory.java @@ -3,7 +3,7 @@ * 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 http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ @@ -30,22 +30,23 @@ public class GenericJpaPlatformFactory public GenericJpaPlatformFactory() { super(); } - + public JpaPlatform buildJpaPlatform(String id) { return new GenericJpaPlatform( id, this.buildJpaVersion(), - new GenericJpaFactory(), + new GenericJpaFactory(), new JpaAnnotationProvider(GenericJpaAnnotationDefinitionProvider.instance()), - GenericJpaPlatformProvider.instance(), - this.buildJpaPlatformVariation()); + GenericJpaPlatformProvider.instance(), + this.buildJpaPlatformVariation(), + GenericJpaJpqlQueryHelper.instance()); } - - + + private JpaPlatform.Version buildJpaVersion() { return new SimpleVersion(JpaFacet.VERSION_1_0.getVersionString()); } - + protected JpaPlatformVariation buildJpaPlatformVariation() { return new JpaPlatformVariation() { public Supported getTablePerConcreteClassInheritanceIsSupported() { @@ -74,7 +75,7 @@ public class GenericJpaPlatformFactory public String getVersion() { return this.getJpaVersion(); } - + public String getJpaVersion() { return this.jpaVersion; } @@ -85,7 +86,7 @@ public class GenericJpaPlatformFactory public boolean isCompatibleWithJpaVersion(String version) { return JPA_VERSION_COMPARATOR.compare(this.jpaVersion, version) >= 0; } - + @Override public String toString() { return "JPA version: " + this.getJpaVersion(); //$NON-NLS-1$ diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaNamedQuery.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaNamedQuery.java index 156ebd7c89..f3d72e898e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaNamedQuery.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaNamedQuery.java @@ -9,13 +9,14 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.jpa.core.context.NamedQuery; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaNamedQuery; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaQuery; -import org.eclipse.jpt.jpa.core.internal.jpql.JpaJpqlQueryHelper; import org.eclipse.jpt.jpa.core.resource.java.NamedQueryAnnotation; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -36,7 +37,7 @@ public class GenericJavaNamedQuery @Override protected void validateQuery_(List messages, IReporter reporter, CompilationUnit astRoot) { - JpaJpqlQueryHelper helper = new JpaJpqlQueryHelper(); + JpaJpqlQueryHelper helper = getJpaPlatform().getJpqlQueryHelper(); helper.validate(this, this.query, this.getQueryAnnotation().getQueryTextRange(astRoot), 1, messages); } @@ -45,4 +46,4 @@ public class GenericJavaNamedQuery public Class getType() { return NamedQuery.class; } -} +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmNamedQuery.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmNamedQuery.java index f788ff1c06..7e7dbcb415 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmNamedQuery.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmNamedQuery.java @@ -9,11 +9,12 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + import org.eclipse.jpt.jpa.core.context.NamedQuery; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmNamedQuery; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmQuery; -import org.eclipse.jpt.jpa.core.internal.jpql.JpaJpqlQueryHelper; import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedQuery; import org.eclipse.persistence.jpa.jpql.ExpressionTools; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -35,10 +36,11 @@ public class GenericOrmNamedQuery @Override protected void validateQuery_(java.util.List messages, IReporter reporter) { + // Convert the literal escape characters into actual escape characters String jpqlQuery = ExpressionTools.unescape(this.query, new int[1]); - JpaJpqlQueryHelper helper = new JpaJpqlQueryHelper(); + JpaJpqlQueryHelper helper = getJpaPlatform().getJpqlQueryHelper(); helper.validate(this, jpqlQuery, this.getQueryTextRange(), 0, messages); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaJpqlQueryHelper.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaJpqlQueryHelper.java new file mode 100644 index 0000000000..44f944978c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaJpqlQueryHelper.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Oracle - initial API and implementation + * + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.internal.jpa2; + +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + +import org.eclipse.jpt.jpa.core.internal.AbstractJpaJpqlQueryHelper; +import org.eclipse.persistence.jpa.jpql.parser.JPQLGrammar2_0; + +/** + * The default implementation of {@link JpaJpqlQueryHelper} that provides support based on the Java + * Persistence functional specification version 2.0. + * + * @version 3.1 + * @since 3.1 + * @author Pascal Filion + */ +public class Generic2_0JpaJpqlQueryHelper extends AbstractJpaJpqlQueryHelper { + + /** + * The singleton instance of this helper. + */ + private static final JpaJpqlQueryHelper INSTANCE = new Generic2_0JpaJpqlQueryHelper(); + + /** + * Creates a new Generic2_0JpaJpqlQueryHelper. + */ + private Generic2_0JpaJpqlQueryHelper() { + super(JPQLGrammar2_0.instance()); + } + + /** + * Returns the singleton instance of this helper. + * + * @return The singleton instance of this helper + */ + public static JpaJpqlQueryHelper instance() { + return INSTANCE; + } +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaPlatformFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaPlatformFactory.java index 6a0db9b94a..f555be49ef 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaPlatformFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/Generic2_0JpaPlatformFactory.java @@ -3,7 +3,7 @@ * 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 http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ @@ -13,9 +13,9 @@ import org.eclipse.jpt.jpa.core.JpaFacet; import org.eclipse.jpt.jpa.core.JpaPlatform; import org.eclipse.jpt.jpa.core.JpaPlatformFactory; import org.eclipse.jpt.jpa.core.JpaPlatformVariation; -import org.eclipse.jpt.jpa.core.internal.JpaAnnotationProvider; import org.eclipse.jpt.jpa.core.internal.GenericJpaPlatform; import org.eclipse.jpt.jpa.core.internal.GenericJpaPlatformFactory.SimpleVersion; +import org.eclipse.jpt.jpa.core.internal.JpaAnnotationProvider; /** * All the state in the JPA platform should be "static" (i.e. unchanging once @@ -30,8 +30,8 @@ public class Generic2_0JpaPlatformFactory public Generic2_0JpaPlatformFactory() { super(); } - - + + public JpaPlatform buildJpaPlatform(String id) { return new GenericJpaPlatform( id, @@ -39,13 +39,14 @@ public class Generic2_0JpaPlatformFactory new GenericJpaFactory2_0(), new JpaAnnotationProvider(Generic2_0JpaAnnotationDefinitionProvider.instance()), Generic2_0JpaPlatformProvider.instance(), - this.buildJpaPlatformVariation()); + this.buildJpaPlatformVariation(), + Generic2_0JpaJpqlQueryHelper.instance()); } - + private JpaPlatform.Version buildJpaVersion() { return new SimpleVersion(JpaFacet.VERSION_2_0.getVersionString()); } - + protected JpaPlatformVariation buildJpaPlatformVariation() { return new JpaPlatformVariation() { //table_per_class inheritance support is optional in the 2.0 spec diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaNamedQuery2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaNamedQuery2_0.java index 3314c4ab02..270975f862 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaNamedQuery2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaNamedQuery2_0.java @@ -9,13 +9,14 @@ *******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context.java; +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.jpa.core.context.NamedQuery; import org.eclipse.jpt.jpa.core.context.Query; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaQuery; -import org.eclipse.jpt.jpa.core.internal.jpql.JpaJpqlQueryHelper; import org.eclipse.jpt.jpa.core.jpa2.context.LockModeType2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaNamedQuery2_0; import org.eclipse.jpt.jpa.core.jpa2.resource.java.NamedQuery2_0Annotation; @@ -99,7 +100,7 @@ public class GenericJavaNamedQuery2_0 @Override protected void validateQuery_(List messages, IReporter reporter, CompilationUnit astRoot) { - JpaJpqlQueryHelper helper = new JpaJpqlQueryHelper(); + JpaJpqlQueryHelper helper = getJpaPlatform().getJpqlQueryHelper(); helper.validate(this, this.query, this.getQueryAnnotation().getQueryTextRange(astRoot), 1, messages); } @@ -114,4 +115,4 @@ public class GenericJavaNamedQuery2_0 public Class getType() { return NamedQuery.class; } -} +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmNamedQuery2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmNamedQuery2_0.java index af0569b466..78eaeabc64 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmNamedQuery2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmNamedQuery2_0.java @@ -9,11 +9,12 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context.orm; +import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; + import org.eclipse.jpt.jpa.core.context.NamedQuery; import org.eclipse.jpt.jpa.core.context.Query; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmQuery; -import org.eclipse.jpt.jpa.core.internal.jpql.JpaJpqlQueryHelper; import org.eclipse.jpt.jpa.core.jpa2.context.LockModeType2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmNamedQuery2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedQuery; @@ -97,10 +98,11 @@ public class GenericOrmNamedQuery2_0 @Override protected void validateQuery_(java.util.List messages, IReporter reporter) { + // Convert the literal escape characters into actual escape characters String jpqlQuery = ExpressionTools.unescape(this.query, new int[1]); - JpaJpqlQueryHelper helper = new JpaJpqlQueryHelper(); + JpaJpqlQueryHelper helper = getJpaPlatform().getJpqlQueryHelper(); helper.validate(this, jpqlQuery, this.getQueryTextRange(), 0, messages); } @@ -115,4 +117,4 @@ public class GenericOrmNamedQuery2_0 public Class getType() { return NamedQuery.class; } -} +} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/ClassConstructor.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/ClassConstructor.java deleted file mode 100644 index ffff5e0fa5..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/ClassConstructor.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import org.eclipse.jdt.core.BindingKey; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.Signature; -import org.eclipse.persistence.jpa.jpql.spi.IConstructor; -import org.eclipse.persistence.jpa.jpql.spi.IType; -import org.eclipse.persistence.jpa.jpql.spi.ITypeDeclaration; -import org.eclipse.persistence.jpa.jpql.spi.ITypeRepository; - -/** - * The concrete implementation of {@link IConstructor} that is wrapping the {@link IMethod} - * representation of a Java constructor (either coming from a Java compiled file or a Java source - * file). - * - * @version 3.0 - * @since 3.0 - * @author Pascal Filion - */ -final class ClassConstructor implements IConstructor { - - /** - * The information of the constructor. - */ - private IMethod method; - - /** - * The declaring type of this constructor. - */ - private JpaType type; - - /** - * The cached {@link ITypeDeclaration ITypeDeclarations} representing each of the constructor's - * parameter types. - */ - private ITypeDeclaration[] typeDeclarations; - - /** - * Creates a new ClassConstructor. - * - * @param type The declaring type of this constructor - * @param methodInfo The information of the constructor - */ - ClassConstructor(JpaType type, IMethod method) { - super(); - this.type = type; - this.method = method; - } - - private ITypeDeclaration[] buildParameterTypes() { - - BindingKey bindingKey = new BindingKey(method.getKey()); - String signature = bindingKey.toSignature(); - - int count = Signature.getParameterCount(signature); - ITypeDeclaration[] typeDeclarations = new ITypeDeclaration[count]; - int index = 0; - - for (String parameterType : Signature.getParameterTypes(signature)) { - - // 1. Retrieve the parameter type (without the type parameters) - String parameterTypeName = Signature.getTypeErasure(parameterType); - - // 3. Convert the type signature to a dot-based name - parameterTypeName = Signature.toString(parameterTypeName); - - // 4. Create the ITypeDeclaration - typeDeclarations[index++] = new JpaTypeDeclaration( - getTypeRepository().getType(parameterTypeName), - buildTypeParameters(parameterType), - Signature.getArrayCount(parameterType) - ); - } - - return typeDeclarations; - } - - private ITypeDeclaration[] buildTypeParameters(String signature) { - - String[] typeParameters = Signature.getTypeArguments(signature); - ITypeDeclaration[] generics = new ITypeDeclaration[typeParameters.length]; - - for (int index = 0; index < typeParameters.length; index++) { - String typeParameter = typeParameters[index]; - - // 1. Retrieve the parameter type (without the wild cards) - switch (Signature.getTypeSignatureKind(typeParameter)) { - case Signature.WILDCARD_TYPE_SIGNATURE: { - typeParameter = typeParameter.substring(1); - } - } - - if (typeParameter.length() == 0) { - generics[index] = getTypeRepository().getTypeHelper().objectTypeDeclaration(); - } - else { - String typeParameterName = Signature.getTypeErasure(typeParameter); - - // 3. Convert the type signature to a dot-based name - typeParameterName = Signature.toString(typeParameterName); - - // 3. Retrieve the IType for the type parameter - IType genericType = getTypeRepository().getType(typeParameterName); - - if (genericType.isResolvable()) { - generics[index] = genericType.getTypeDeclaration(); - } - else { - generics[index] = getTypeRepository().getTypeHelper().objectTypeDeclaration(); - } - } - } - - return generics; - } - - /** - * {@inheritDoc} - */ - public ITypeDeclaration[] getParameterTypes() { - if (typeDeclarations == null) { - typeDeclarations = buildParameterTypes(); - } - return typeDeclarations; - } - - private ITypeRepository getTypeRepository() { - return type.getTypeRepository(); - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/IJpaType.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/IJpaType.java deleted file mode 100644 index 0d914a9e04..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/IJpaType.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import org.eclipse.persistence.jpa.jpql.spi.IType; - -/** - * An internal interface used by all 3 implementations of {@link IType}. - * - * @see JavaType - * @see JpaType - * @see SimpleType - * - * @version 3.0 - * @since 3.0 - * @author Pascal Filion - */ -interface IJpaType extends IType { - - /** - * Manually sets the declaration of this {@link IType}, which gives the information about type - * parameters, dimensionality, etc. - * - * @param typeDeclaration The external form of the type declaration - */ - void setTypeDeclaration(JpaTypeDeclaration typeDeclaration); -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaConstructor.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaConstructor.java deleted file mode 100644 index 63a63a8d82..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaConstructor.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Type; -import org.eclipse.persistence.jpa.jpql.spi.IConstructor; -import org.eclipse.persistence.jpa.jpql.spi.IType; -import org.eclipse.persistence.jpa.jpql.spi.ITypeDeclaration; -import org.eclipse.persistence.jpa.jpql.spi.ITypeRepository; - -/** - * The concrete implementation of {@link IConstructor} that is wrapping a Java constructor. - * - * @version 2.3 - * @since 2.3 - * @author Pascal Filion - */ -final class JavaConstructor implements IConstructor { - - /** - * The actual Java constructor. - */ - private Constructor constructor; - - /** - * The cached {@link ITypeDeclaration parameter types}. - */ - private ITypeDeclaration[] parameterTypes; - - /** - * The declaring type of this constructor. - */ - private JavaType type; - - /** - * Creates a new JavaConstructor. - * - * @param type The declaring type of this constructor - * @param constructor The actual Java constructor - */ - JavaConstructor(JavaType type, Constructor constructor) { - super(); - this.type = type; - this.constructor = constructor; - } - - private ITypeDeclaration[] buildParameterTypes() { - - Class[] types = constructor.getParameterTypes(); - Type[] genericTypes = constructor.getGenericParameterTypes(); - ITypeDeclaration[] typeDeclarations = new ITypeDeclaration[types.length]; - - for (int index = 0, count = types.length; index < count; index++) { - typeDeclarations[index] = buildTypeDeclaration(types[index], genericTypes[index]); - } - - return typeDeclarations; - } - - private ITypeDeclaration buildTypeDeclaration(Class javaType, Type genericType) { - ITypeRepository typeRepository = getTypeRepository(); - IType type = typeRepository.getType(javaType); - return new JavaTypeDeclaration(typeRepository, type, genericType, javaType.isArray()); - } - - /** - * {@inheritDoc} - */ - public ITypeDeclaration[] getParameterTypes() { - if (parameterTypes == null) { - parameterTypes = buildParameterTypes(); - } - return parameterTypes; - } - - private ITypeRepository getTypeRepository() { - return type.getTypeRepository(); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return constructor.toGenericString(); - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaType.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaType.java deleted file mode 100644 index 517e08caf1..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaType.java +++ /dev/null @@ -1,246 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import org.eclipse.persistence.jpa.jpql.ExpressionTools; -import org.eclipse.persistence.jpa.jpql.spi.IConstructor; -import org.eclipse.persistence.jpa.jpql.spi.IType; -import org.eclipse.persistence.jpa.jpql.spi.ITypeDeclaration; -import org.eclipse.persistence.jpa.jpql.spi.ITypeRepository; - -/** - * The concrete implementation of {@link IType} that is wrapping a Java type. - * - * @version 2.3 - * @since 2.3 - * @author Pascal Filion - */ -final class JavaType implements IJpaType { - - /** - * The cached {@link IConstructor IConstructors}. - */ - private Collection constructors; - - /** - * The list of names for the {@link Enum}'s constants otherwise an empty array. - */ - private String[] enumConstants; - - /** - * The actual Java type. - */ - private Class type; - - /** - * The cached {@link ITypeDeclaration} for this {@link IType}. - */ - private ITypeDeclaration typeDeclaration; - - /** - * The fully qualified name of the Java type. - */ - private String typeName; - - /** - * The external form of a type repository. - */ - private ITypeRepository typeRepository; - - /** - * Creates a new JavaType. - * - * @param typeRepository The external form of a type repository - * @param type The actual Java type wrapped by this class - */ - JavaType(ITypeRepository typeRepository, Class type) { - super(); - this.type = type; - this.typeName = type.getName(); - this.typeRepository = typeRepository; - } - - private IConstructor buildConstructor(Constructor constructor) { - return new JavaConstructor(this, constructor); - } - - private Collection buildConstructors() { - - Constructor[] javaConstructors = type.getDeclaredConstructors(); - Collection constructors = new ArrayList(javaConstructors.length); - - for (Constructor javaConstructor : javaConstructors) { - constructors.add(buildConstructor(javaConstructor)); - } - - return constructors; - } - - private String[] buildEnumConstants() { - - if (!type.isEnum()) { - return ExpressionTools.EMPTY_STRING_ARRAY; - } - - Object[] enumConstants = type.getEnumConstants(); - String[] names = new String[enumConstants.length]; - - for (int index = enumConstants.length; --index >= 0; ) { - names[index] = ((Enum) enumConstants[index]).name(); - } - - return names; - } - - /** - * {@inheritDoc} - */ - public Iterable constructors() { - if (constructors == null) { - constructors = buildConstructors(); - } - return Collections.unmodifiableCollection(constructors); - } - - /** - * {@inheritDoc} - */ - public boolean equals(IType type) { - return (this == type) ? true : typeName.equals(type.getName()); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object object) { - return (this == object) || equals((IType) object); - } - - /** - * {@inheritDoc} - */ - public String[] getEnumConstants() { - if (enumConstants == null) { - enumConstants = buildEnumConstants(); - } - return enumConstants; - } - - /** - * {@inheritDoc} - */ - public String getName() { - return typeName; - } - - /** - * Returns the encapsulated {@link Class}, which is the actual type. - * - * @return The actual Java type, if null is returned; then the class could not be resolved - */ - Class getType() { - return type; - } - - /** - * {@inheritDoc} - */ - public ITypeDeclaration getTypeDeclaration() { - if (typeDeclaration == null) { - typeDeclaration = new JavaTypeDeclaration(typeRepository, this, null, (type != null) ? type.isArray() : false); - } - return typeDeclaration; - } - - /** - * Returns the type repository for the application. - * - * @return The repository of {@link IType ITypes} - */ - ITypeRepository getTypeRepository() { - return typeRepository; - } - - /** - * {@inheritDoc} - */ - public boolean hasAnnotation(Class annotationType) { - return type.isAnnotationPresent(annotationType); - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return typeName.hashCode(); - } - - /** - * {@inheritDoc} - */ - public boolean isAssignableTo(IType type) { - - if (this == type) { - return true; - } - - // TODO - if (type instanceof JavaType) { - Class otherType = ((JavaType) type).type; - return otherType.isAssignableFrom(this.type); - } - else if (type instanceof JpaType) { - // TODO - return false; - } - - return false; - } - - /** - * {@inheritDoc} - */ - public boolean isEnum() { - return (type != null) && type.isEnum(); - } - - /** - * {@inheritDoc} - */ - public boolean isResolvable() { - return true; - } - - /** - * {@inheritDoc} - */ - public void setTypeDeclaration(JpaTypeDeclaration typeDeclaration) { - this.typeDeclaration = typeDeclaration; - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return typeName; - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaTypeDeclaration.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaTypeDeclaration.java deleted file mode 100644 index d33231a442..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JavaTypeDeclaration.java +++ /dev/null @@ -1,271 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.lang.reflect.WildcardType; -import java.util.ArrayList; -import java.util.List; -import org.eclipse.persistence.jpa.jpql.spi.IType; -import org.eclipse.persistence.jpa.jpql.spi.ITypeDeclaration; -import org.eclipse.persistence.jpa.jpql.spi.ITypeRepository; - -/** - * The concrete implementation of {@link ITypeDeclaration} that is wrapping the representation - * of the declaration description of a type. - * - * @see IMapping - * @see IType - * - * @version 2.3 - * @since 2.3 - * @author Pascal Filion - */ -@SuppressWarnings("nls") -final class JavaTypeDeclaration implements ITypeDeclaration { - - /** - * Determines whether the type declaration represents an array. - */ - private boolean array; - - /** - * The actual type that contains the generics, if any is present. - */ - private Object genericType; - - /** - * The cached {@link ITypeDeclaration ITypeDeclarations} representing the generics of the {@link - * Type}. - */ - private ITypeDeclaration[] genericTypes; - - /** - * The external form of the Java type. - */ - private final IType type; - - /** - * The repository of {@link IType ITypes}. - */ - private ITypeRepository typeRepository; - - /** - * Creates a new JavaTypeDeclaration. - * - * @param typeRepository The repository of {@link IType ITypes} - * @param type The external form of the Java type - * @param genericType The actual type that contains the generics, if any is present - * @param array Determines whether the type declaration represents an array - */ - JavaTypeDeclaration(ITypeRepository typeRepository, - IType type, - Object genericType, - boolean array) { - - super(); - this.type = type; - this.array = array; - this.genericType = genericType; - this.typeRepository = typeRepository; - } - - private String buildArrayTypeName(String arrayTypeName) { - - StringBuilder sb = new StringBuilder(); - int index = arrayTypeName.indexOf('['); - int dimensionality = (arrayTypeName.length() - index) / 2; - String typeName = arrayTypeName.substring(0, index); - - while (--dimensionality >= 0) { - sb.append("["); - } - - String elementType = elementType(typeName); - - sb.append(elementType); - sb.append(typeName); - - if (elementType.equals("L")) { - sb.append(";"); - } - - return sb.toString(); - } - - private ITypeDeclaration[] buildParameterTypes() { - - List parameterTypes = new ArrayList(); - - // Example: Class - if (genericType instanceof ParameterizedType) { - ParameterizedType parameterizedType = (ParameterizedType) genericType; - for (Type type : parameterizedType.getActualTypeArguments()) { - ITypeDeclaration typeParameter = buildTypeDeclaration(type); - parameterTypes.add(typeParameter); - } - } - // T[] - else if (genericType instanceof GenericArrayType) { - GenericArrayType genericArrayType = (GenericArrayType) genericType; - parameterTypes.add(buildTypeDeclaration(genericArrayType.getGenericComponentType())); - } - // Example: Class - else if (genericType.getClass() == Class.class) { - ITypeDeclaration typeParameter = buildTypeDeclaration((Class) genericType); - parameterTypes.add(typeParameter); - } - // Example: - else if (genericType.getClass() == Class[].class) { - for (Class javaType : ((Class[]) genericType)) { - ITypeDeclaration typeParameter = buildTypeDeclaration(javaType); - parameterTypes.add(typeParameter); - } - } - // Example: - else if (genericType.getClass() == IType[].class) { - for (IType type : ((IType[]) genericType)) { - ITypeDeclaration typeParameter = new JavaTypeDeclaration(typeRepository, type, null, false); - parameterTypes.add(typeParameter); - } - } - - return parameterTypes.toArray(new ITypeDeclaration[parameterTypes.size()]); - } - - private JavaTypeDeclaration buildTypeDeclaration(Class javaType) { - return new JavaTypeDeclaration( - typeRepository, - getType(javaType), - null, - javaType.isArray() - ); - } - - private JavaTypeDeclaration buildTypeDeclaration(Object genericType) { - - // - if (genericType instanceof ParameterizedType) { - ParameterizedType parameterizedType = (ParameterizedType) genericType; - return buildTypeDeclaration(parameterizedType.getRawType()); - } - - // - if (genericType instanceof TypeVariable) { - TypeVariable typeVariable = (TypeVariable) genericType; - for (Type type : typeVariable.getBounds()) { - return buildTypeDeclaration(type); - } - return buildTypeDeclaration(Object.class); - } - - // ? - if (genericType instanceof WildcardType) { - WildcardType wildcardType = (WildcardType) genericType; - for (Type type : wildcardType.getUpperBounds()) { - return buildTypeDeclaration(type); - } - return buildTypeDeclaration(Object.class); - } - - // T[] - if (genericType instanceof GenericArrayType) { - GenericArrayType genericArrayType = (GenericArrayType) genericType; - String arrayTypeName = buildArrayTypeName(genericArrayType.toString()); - IType arrayType = typeRepository.getType(arrayTypeName); - - return new JavaTypeDeclaration( - typeRepository, - arrayType, - genericArrayType.getGenericComponentType(), - true - ); - } - - return buildTypeDeclaration((Class) genericType); - } - - private String elementType(String typeName) { - - if (typeName.equals("boolean")) return "Z"; - if (typeName.equals("byte")) return "B"; - if (typeName.equals("char")) return "C"; - if (typeName.equals("double")) return "D"; - if (typeName.equals("float")) return "F"; - if (typeName.equals("int")) return "I"; - if (typeName.equals("long")) return "J"; - if (typeName.equals("short")) return "S"; - - return "L"; - } - - /** - * {@inheritDoc} - */ - public int getDimensionality() { - if (array) { - String name = type.getName(); - int index = 0; - while (name.charAt(index) == '[') { - index++; - } - return index; - } - return 0; - } - - /** - * {@inheritDoc} - */ - public IType getType() { - return type; - } - - private IType getType(Class type) { - return typeRepository.getType(type); - } - - /** - * {@inheritDoc} - */ - public ITypeDeclaration[] getTypeParameters() { - if (genericTypes == null) { - if (genericType == null) { - genericTypes = new ITypeDeclaration[0]; - } - else { - genericTypes = buildParameterTypes(); - } - } - return genericTypes; - } - - /** - * {@inheritDoc} - */ - public boolean isArray() { - return array; - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return (genericType != null) ? genericType.toString() : type.toString(); - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaConstructor.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaConstructor.java deleted file mode 100644 index 001937bdcc..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaConstructor.java +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import org.eclipse.jdt.core.dom.IMethodBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.persistence.jpa.jpql.spi.IConstructor; -import org.eclipse.persistence.jpa.jpql.spi.IType; -import org.eclipse.persistence.jpa.jpql.spi.ITypeDeclaration; -import org.eclipse.persistence.jpa.jpql.spi.ITypeRepository; - -/** - * The concrete implementation of {@link IConstructor} that is wrapping the design-time - * representation of a Java constructor. - * - * @version 3.0 - * @since 3.0 - * @author Pascal Filion - */ -final class JpaConstructor implements IConstructor { - - /** - * The design-time representation of a Java constructor. - */ - private IMethodBinding constructor; - - /** - * The cached {@link ITypeDeclaration ITypeDeclarations} representing each of the constructor's - * parameter types. - */ - private ITypeDeclaration[] typeDeclarations; - - /** - * The type owning this constructor. - */ - private JpaType type; - - /** - * Creates a new JpaConstructor. - * - * @param type The type owning the constructor - * @param constructor The design-time representation of a Java constructor - */ - JpaConstructor(JpaType type, IMethodBinding constructor) { - super(); - this.type = type; - this.constructor = constructor; - } - - private ITypeDeclaration buildTypeDeclaration(ITypeBinding parameterType) { - - boolean array = parameterType.isArray(); - String typeParameterName; - - if (array) { - ITypeBinding componentType = parameterType.getComponentType(); - - // [] or >[] - if (componentType.isTypeVariable() || - componentType.isParameterizedType()) { - - typeParameterName = componentType.getErasure().getQualifiedName(); - } - else { - typeParameterName = componentType.getQualifiedName(); - } - - // Now for the type arguments, we have to use the component type - parameterType = componentType; - } - // or > - else if (parameterType.isTypeVariable() || - parameterType.isParameterizedType()) { - - typeParameterName = parameterType.getErasure().getQualifiedName(); - } - else { - typeParameterName = parameterType.getQualifiedName(); - } - - // Retrieve the fully qualified name of the type - ITypeRepository typeRepository = type.getTypeRepository(); - ITypeBinding[] typeArguments = parameterType.getTypeArguments(); - ITypeDeclaration[] genericTypes = new ITypeDeclaration[typeArguments.length]; - int index = 0; - - for (ITypeBinding typeArgument : typeArguments) { - String genericTypeName = typeArgument.getErasure().getQualifiedName(); - IType genericType = typeRepository.getType(genericTypeName); - genericTypes[index++] = genericType.getTypeDeclaration(); - } - - return new JpaTypeDeclaration( - typeRepository.getType(typeParameterName), - genericTypes, - parameterType.getDimensions() - ); - } - - private ITypeDeclaration[] buildTypeDeclarations() { - - ITypeBinding[] parameterTypes = constructor.getParameterTypes(); - ITypeDeclaration[] declarations = new ITypeDeclaration[parameterTypes.length]; - - for (int index = declarations.length; --index >= 0; ) { - declarations[index] = buildTypeDeclaration(parameterTypes[index]); - } - - return declarations; - } - - /** - * {@inheritDoc} - */ - public ITypeDeclaration[] getParameterTypes() { - if (typeDeclarations == null) { - typeDeclarations = buildTypeDeclarations(); - } - return typeDeclarations; - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return constructor.toString(); - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEmbeddable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEmbeddable.java deleted file mode 100644 index 2bbf9b4639..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEmbeddable.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import org.eclipse.jpt.jpa.core.context.Embeddable; -import org.eclipse.persistence.jpa.jpql.spi.IEmbeddable; -import org.eclipse.persistence.jpa.jpql.spi.IManagedTypeVisitor; - -/** - * The concrete implementation of {@link IEmbeddable} that is wrapping the design-time - * representation of a JPA embeddable. - * - * @version 3.0 - * @since 3.0 - * @author Pascal Filion - */ -final class JpaEmbeddable extends JpaManagedType - implements IEmbeddable { - - /** - * Creates a new JpaEmbeddable. - * - * @param provider The provider of JPA managed types - * @param embeddable The design-time model object wrapped by this class - */ - JpaEmbeddable(JpaManagedTypeProvider provider, Embeddable embeddable) { - super(provider, embeddable); - } - - /** - * {@inheritDoc} - */ - public void accept(IManagedTypeVisitor visitor) { - visitor.visit(this); - } - - /** - * {@inheritDoc} - */ - @Override - Embeddable getManagedType() { - return (Embeddable) super.getManagedType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return getType().getName(); - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEntity.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEntity.java deleted file mode 100644 index a3b251f9ed..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaEntity.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import java.util.HashMap; -import java.util.Map; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.NamedQuery; -import org.eclipse.persistence.jpa.jpql.spi.IEntity; -import org.eclipse.persistence.jpa.jpql.spi.IManagedTypeVisitor; -import org.eclipse.persistence.jpa.jpql.spi.IQuery; - -/** - * The concrete implementation of {@link IEntity} that is wrapping the design-time representation - * of a JPA entity. - * - * @version 3.1 - * @since 3.0 - * @author Pascal Filion - */ -final class JpaEntity extends JpaManagedType - implements IEntity { - - /** - * The cached used to quickly retrieve any queries that have been cached. - */ - private Map queries; - - /** - * Creates a new JpaEntity. - * - * @param provider The provider of JPA managed types - * @param entity The design-time model object wrapped by this class - */ - JpaEntity(JpaManagedTypeProvider provider, Entity entity) { - super(provider, entity); - } - - /** - * {@inheritDoc} - */ - public void accept(IManagedTypeVisitor visitor) { - visitor.visit(this); - } - - private IQuery buildQuery(JpaManagedTypeProvider provider, NamedQuery namedQuery) { - return new JpaQuery(provider, namedQuery); - } - - /** - * {@inheritDoc} - */ - @Override - Entity getManagedType() { - return (Entity) super.getManagedType(); - } - - /** - * {@inheritDoc} - */ - public String getName() { - return getManagedType().getName(); - } - - /** - * {@inheritDoc} - */ - public IQuery getNamedQuery(String queryName) { - initializeQueries(); - return queries.get(queryName); - } - - private void initializeQueries() { - if (queries == null) { - queries = new HashMap(); - initializeQueries(queries); - } - } - - private void initializeQueries(Map queries) { - JpaManagedTypeProvider provider = getProvider(); - for (NamedQuery namedQuery : getNamedQueries()) { - queries.put(namedQuery.getName(), buildQuery(provider, namedQuery)); - } - } - - private ListIterable getNamedQueries() { - return getManagedType().getQueryContainer().getNamedQueries(); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return getName(); - } -} \ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaJpqlQueryHelper.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaJpqlQueryHelper.java deleted file mode 100644 index 0250271842..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpql/JpaJpqlQueryHelper.java +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 - * which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Oracle - initial API and implementation - * - ******************************************************************************/ -package org.eclipse.jpt.jpa.core.internal.jpql; - -import java.util.List; -import org.eclipse.jpt.common.core.internal.utility.SimpleTextRange; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.NamedQuery; -import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; -import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; -import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationPreferences; -import org.eclipse.persistence.jpa.jpql.ExpressionTools; -import org.eclipse.persistence.jpa.jpql.JPQLQueryHelper; -import org.eclipse.persistence.jpa.jpql.JPQLQueryProblem; -import org.eclipse.persistence.jpa.jpql.spi.IQuery; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; - -/** - * This helper can perform the following operations over a JPQL query: - *