### Eclipse Workspace Patch 1.0 #P org.eclipse.jpt.jpa.core diff --git src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java index fa76e4b..6fe4568 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java +++ src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java @@ -9,16 +9,28 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.eclipse.core.resources.IResource; +import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IPackageFragment; +import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jpt.common.core.internal.resource.java.source.SourceNode; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; import org.eclipse.jpt.common.utility.internal.ArrayTools; import org.eclipse.jpt.common.utility.internal.ClassName; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.ReflectionTools; import org.eclipse.jpt.common.utility.internal.Transformer; +import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.ColumnMapping; @@ -35,6 +47,7 @@ import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.internal.plugin.JptJpaCorePlugin; import org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0; import org.eclipse.jpt.jpa.core.jpa2.context.CollectionMapping2_0; import org.eclipse.jpt.jpa.core.jpa2.context.ElementCollectionMapping2_0; @@ -125,6 +138,42 @@ java.sql.Date.class.getName(), java.sql.Time.class.getName(), java.sql.Timestamp.class.getName(), + }; + + private static final String[] PRIMITIVES = { + boolean.class.getName(), + byte.class.getName(), + char.class.getName(), + double.class.getName(), + float.class.getName(), + int.class.getName(), + long.class.getName(), + short.class.getName() + }; + + private static final String[] PRIMITIVE_WRAPPERS = { + Boolean.class.getName(), + Byte.class.getName(), + Character.class.getName(), + Double.class.getName(), + Float.class.getName(), + Integer.class.getName(), + Long.class.getName(), + Short.class.getName() + }; + + private static final String[] PRIMITIVE_ARRAY_TYPES = { + byte[].class.getSimpleName(), + Byte[].class.getSimpleName(), + char[].class.getSimpleName(), + Character[].class.getSimpleName() + }; + + private static final String[] COLLECTION_TYPES = { + Collection.class.getName(), + List.class.getName(), + Map.class.getName(), + Set.class.getName() }; /** @@ -486,6 +535,84 @@ (resourceNode instanceof SourceNode); } + /** + * Returns sorted names of types of the given project + */ + public static Iterable getSortedJavaTypeNames(IJavaProject javaProject) { + return CollectionTools.sort(getJavaTypeNames(javaProject)); + } + + /** + * Returns the names of types of the given project + */ + public static Iterable getJavaTypeNames(IJavaProject javaProject) { + return new TransformationIterable(getJavaTypes(javaProject)) { + @Override + protected String transform(IType type) { + return type.getFullyQualifiedName(); + } + }; + } + + /** + * Returns all the types cross the given project + */ + public static Iterable getJavaTypes(IJavaProject javaProject) { + List typesList = new ArrayList(); + try { + IPackageFragmentRoot[] pkgRoots = javaProject.getAllPackageFragmentRoots(); + for (IPackageFragmentRoot root : pkgRoots) { + IJavaElement[] jElements = root.getChildren(); + for (IJavaElement jElement : jElements) { + if (jElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { + ICompilationUnit[] units = ((IPackageFragment) jElement).getCompilationUnits(); + for (ICompilationUnit unit : units) { + CollectionTools.addAll(typesList, unit.getTypes()); + } + } + } + } + } catch (JavaModelException e) { + JptJpaCorePlugin.instance().logError(e); + } + return typesList; + } + + /** + * Returns the names of primary basic types + */ + public static Iterable getPrimaryBasicTypeNames() { + List names = new ArrayList(); + names.addAll(CollectionTools.list(PRIMITIVES)); + names.addAll(CollectionTools.list(PRIMITIVE_WRAPPERS)); + names.addAll(CollectionTools.list(OTHER_VALID_BASIC_TYPE_NAMES)); + return names; + } + + /** + * Returns the names of all possible valid basic types + * + * @return a String iterable that includes extra basic types besides + * these ones returned by getPrimaryBasicTypeNames method + * + * @see #getPrimaryBasicTypeNames() + */ + public static Iterable getAllBasicTypeNames() { + List names = new ArrayList(); + names.addAll(CollectionTools.list(getPrimaryBasicTypeNames())); + names.addAll(CollectionTools.list(PRIMITIVE_ARRAY_TYPES)); + names.add(Enum.class.getSimpleName()); + return names; + } + + /** + * Returns the names of collection types + */ + public static Iterable getCollectionTypeNames() { + List names = new ArrayList(); + names.addAll(CollectionTools.list(COLLECTION_TYPES)); + return names; + } // ********** constructor ********** diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java index 952fb6c..b36b759 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java @@ -1217,7 +1217,7 @@ return result; } } - return EmptyIterable.instance(); + return null; } @Override diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java index 319af5d..e340cb5 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java @@ -1981,6 +1981,10 @@ if (result != null) { return result; } + result = this.idClassReference.getCompletionProposals(pos); + if (result != null) { + return result; + } return null; } diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappedSuperclass.java src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappedSuperclass.java index 6bc760e..6f547d0 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappedSuperclass.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappedSuperclass.java @@ -213,4 +213,19 @@ return new GenericMappedSuperclassPrimaryKeyValidator(this); // TODO - JPA 2.0 validation } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + result = this.idClassReference.getCompletionProposals(pos); + if (result != null) { + return result; + } + return null; + } } diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java index d191602..299e939 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java @@ -862,6 +862,13 @@ return this.getTargetEntityNonTransientAttributeNames(); } + @SuppressWarnings("unchecked") + protected Iterable getCandidateMapKeyClassNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + MappingTools.getPrimaryBasicTypeNames() + ); + } // ********** metamodel ********** @@ -1080,6 +1087,9 @@ if (this.mapKeyNameTouches(pos)) { return this.getCandidateMapKeyNames(); } + if (this.mapKeyClassTouches(pos)) { + return this.getCandidateMapKeyClassNames(); + } result = this.mapKeyColumn.getCompletionProposals(pos); if (result != null) { return result; @@ -1102,7 +1112,12 @@ } protected boolean mapKeyNameTouches(int pos) { - return this.xmlAttributeMapping.mapKeyNameTouches(pos); + return this.getXmlMapKey() == null? false : this.getXmlMapKey().mapKeyNameTouches(pos); + } + + protected boolean mapKeyClassTouches(int pos) { + return this.xmlAttributeMapping.getMapKeyClass() == null ? false : + this.xmlAttributeMapping.getMapKeyClass().classNameTouches(pos); } // ********** abstract owner ********** diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java index 00c400e..98f33a5 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java @@ -32,6 +32,7 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipMapping; import org.eclipse.jpt.jpa.core.internal.context.AttributeMappingTools; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.GenericOrmCascade; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -455,6 +456,17 @@ if (result != null) { return result; } + if (this.targetEntityTouches(pos)) { + return this.getCandidateTargetEntityClassNames(); + } return null; } + + protected boolean targetEntityTouches(int pos) { + return this.xmlAttributeMapping.targetEntityTouches(pos); + } + + protected Iterable getCandidateTargetEntityClassNames() { + return MappingTools.getSortedJavaTypeNames(getJavaProject()); + } } diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java index 098272c..daa3484 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java @@ -39,6 +39,7 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; import org.eclipse.jpt.jpa.core.internal.context.AttributeMappingTools; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.jpa1.context.GenericTypeMappingValidator; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; @@ -614,43 +615,11 @@ return null; } - private Iterable getCandidateClassNames() { - final String packageName = this.getEntityMappings().getPackage(); - if (!StringTools.stringIsEmpty(packageName)) { - return new TransformationIterable(this.getFilteredCandidateClassNames(packageName)) { - @Override - protected String transform(String className) { - return className.substring(packageName.length()+1); - } - }; - } - return this.getCandidateFullyQualifiedClassNames(); - } - - private Iterable getFilteredCandidateClassNames(final String packageName) { - return new FilteringIterable(this.getCandidateFullyQualifiedClassNames()) { - @Override - protected boolean accept(String className) { - return className.startsWith(packageName); - } - }; + protected Iterable getCandidateClassNames() { + return MappingTools.getSortedJavaTypeNames(this.getJavaProject()); } - /** - * @return names of the classes specified by class refs and jar files - */ - // should return names of all the classes defined in the project? - private Iterable getCandidateFullyQualifiedClassNames() { - return new TransformationIterable( - this.getPersistenceUnit().getJavaPersistentTypes()) { - @Override - protected String transform(PersistentType pType) { - return pType.getName(); - } - }; - } - - private boolean classNameTouches(int pos) { + protected boolean classNameTouches(int pos) { return this.getXmlTypeMapping().classNameTouches(pos); } } diff --git src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmIdClassReference.java src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmIdClassReference.java index 38c092c..03c4ecd 100644 --- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmIdClassReference.java +++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmIdClassReference.java @@ -27,6 +27,7 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType; import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; import org.eclipse.jpt.jpa.core.internal.context.AbstractXmlContextNode; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; @@ -444,4 +445,26 @@ XmlClassReference xmlIdClassRef = this.getXmlIdClassRef(); return (xmlIdClassRef == null) ? null : xmlIdClassRef.getClassNameTextRange(); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.idCLassNameTouches(pos)) { + return this.getCandidateIdClassNames(); + } + return null; + } + + protected Iterable getCandidateIdClassNames() { + return MappingTools.getSortedJavaTypeNames(this.getJavaProject()); + } + + protected boolean idCLassNameTouches(int pos) { + return this.getXmlIdClassRef() == null ? false : this.getXmlIdClassRef().classNameTouches(pos); + } } diff --git src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java index e16b2a3..4915211 100644 --- src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java +++ src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java @@ -1770,6 +1770,12 @@ if (result != null) { return result; } + if (this.targetClassTouches(pos)) { + return this.getCandidateClassNames(); + } + if (this.mapKeyClassTouches(pos)) { + return this.getCandidateClassNames(); + } if (this.mapKeyNameTouches(pos)) { return this.getCandidateMapKeyNames(); } @@ -1793,9 +1799,26 @@ } return null; } - + + @SuppressWarnings("unchecked") + protected Iterable getCandidateClassNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + MappingTools.getPrimaryBasicTypeNames() + ); + } + + protected boolean targetClassTouches(int pos) { + return this.xmlAttributeMapping.targetClassTouches(pos); + } + + protected boolean mapKeyClassTouches(int pos) { + return this.xmlAttributeMapping.getMapKeyClass() == null ? false : + this.xmlAttributeMapping.getMapKeyClass().classNameTouches(pos); + } + protected boolean mapKeyNameTouches(int pos) { - return this.xmlAttributeMapping.mapKeyNameTouches(pos); + return this.getXmlMapKey() == null ? false : this.getXmlMapKey().mapKeyNameTouches(pos); } // ********** abstract owner ********** diff --git src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java index 53a7fb2..8654b43 100644 --- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java +++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java @@ -1130,17 +1130,8 @@ return getAttributeCodeAssistTextRange(JPA.MAPPED_BY); } - public TextRange getMapKeyNameCodeAssistTextRange() { - return getAttributeCodeAssistTextRange(JPA.MAP_KEY); - } - public boolean mappedByTouches(int pos) { TextRange textRange = this.getMappedByCodeAssistTextRange(); return (textRange!= null) && textRange.touches(pos); - } - - public boolean mapKeyNameTouches(int pos) { - TextRange textRange = this.getMapKeyNameCodeAssistTextRange(); - return (textRange != null) && textRange.touches(pos); } } diff --git src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlRelationshipMapping.java src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlRelationshipMapping.java index c7e73f0..aaa62df 100644 --- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlRelationshipMapping.java +++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlRelationshipMapping.java @@ -406,4 +406,14 @@ return new ReplaceEdit(offset, packageLength, newPackageName); } + // *********** content assist ************ + + public TextRange getTargetEntityCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(JPA.TARGET_ENTITY); + } + + public boolean targetEntityTouches(int pos) { + TextRange textRange = this.getTargetEntityCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } // RelationshipMapping diff --git src/org/eclipse/jpt/jpa/core/resource/orm/MapKey.java src/org/eclipse/jpt/jpa/core/resource/orm/MapKey.java index c172ec5..53abbea 100644 --- src/org/eclipse/jpt/jpa/core/resource/orm/MapKey.java +++ src/org/eclipse/jpt/jpa/core/resource/orm/MapKey.java @@ -14,6 +14,7 @@ import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.core.resource.xml.EBaseObject; import org.eclipse.jpt.common.core.resource.xml.EBaseObjectImpl; import org.eclipse.wst.common.internal.emf.resource.Translator; @@ -218,4 +219,14 @@ return new Translator(JPA.NAME, OrmPackage.eINSTANCE.getMapKey_Name(), Translator.DOM_ATTRIBUTE); } + // ********** content assist *************** + + public TextRange getMapKeyNameCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(JPA.NAME); + } + + public boolean mapKeyNameTouches(int pos) { + TextRange textRange = this.getMapKeyNameCodeAssistTextRange(); + return (textRange != null) && textRange.touches(pos); + } } // MapKey diff --git src/org/eclipse/jpt/jpa/core/resource/orm/XmlClassReference.java src/org/eclipse/jpt/jpa/core/resource/orm/XmlClassReference.java index 361bd1b..c965557 100644 --- src/org/eclipse/jpt/jpa/core/resource/orm/XmlClassReference.java +++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlClassReference.java @@ -252,4 +252,15 @@ return new ReplaceEdit(offset, packageLength, newPackageName); } + // ********** content assist *************** + + public TextRange getClassNameCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(JPA.CLASS); + } + + public boolean classNameTouches(int pos) { + TextRange textRange = this.getClassNameCodeAssistTextRange(); + return (textRange != null) && textRange.touches(pos); + } + } diff --git src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java index ab7a997..97b8f76 100644 --- src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java +++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java @@ -1695,13 +1695,12 @@ // ********** content assist *************** - public TextRange getMapKeyNameCodeAssistTextRange() { - return getAttributeCodeAssistTextRange(JPA.MAP_KEY); + public TextRange getTargetClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(JPA2_0.TARGET_CLASS); } - public boolean mapKeyNameTouches(int pos) { - TextRange textRange = this.getMapKeyNameCodeAssistTextRange(); - return (textRange != null) && textRange.touches(pos); + public boolean targetClassTouches(int pos) { + TextRange textRange = this.getTargetClassCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); } - } #P org.eclipse.jpt.jpa.eclipselink.core diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java index bf59eb4..2c36be7 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java @@ -23,8 +23,8 @@ import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; import org.eclipse.jpt.jpa.core.context.DiscriminatorType; import org.eclipse.jpt.jpa.core.context.Generator; -import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedDiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedDiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmXml; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; @@ -35,7 +35,6 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; -import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmReadOnlyTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmUuidGenerator; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmVirtualTenantDiscriminatorColumn2_3; @@ -703,4 +702,19 @@ super.validate(messages, reporter); this.converterContainer.validate(messages, reporter); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + result = this.converterContainer.getCompletionProposals(pos); + if (result != null) { + return result; + } + return null; + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmElementCollectionMapping2_0.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmElementCollectionMapping2_0.java index 0fbdd72..5b638fc 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmElementCollectionMapping2_0.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmElementCollectionMapping2_0.java @@ -14,16 +14,19 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmConverter; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.AbstractOrmElementCollectionMapping2_0; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkElementCollectionMapping2_0; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkJoinFetch; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmConvertibleMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLink2_0JpaPlatformFactory; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; @@ -200,4 +203,35 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected Iterable getCandidateAttributeTypeNames() { + return MappingTools.getCollectionTypeNames(); + } + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateClassNames() { + return new CompositeIterable( + super.getCandidateClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java index e9f8646..3b666b4 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java @@ -12,6 +12,7 @@ import java.util.List; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.Converter; @@ -27,6 +28,7 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmTemporalConverter; import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmAttributeMapping; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.NamedColumnValidator; @@ -39,6 +41,7 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkArrayMapping2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmConvertibleMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlArray; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_3.XmlAttributes_2_3; import org.eclipse.text.edits.ReplaceEdit; @@ -362,6 +365,33 @@ if (result != null) { return result; } + if (this.targetClassTouches(pos)) { + return this.getCandidateTargetClassNames(); + } + if (this.attributeTypeTouches(pos)) { + return this.getcandidateAttributeTypeNames(); + } return null; } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected boolean targetClassTouches(int pos) { + return this.xmlAttributeMapping.targetClassTouches(pos); + } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateTargetClassNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + MappingTools.getPrimaryBasicTypeNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } + + protected Iterable getcandidateAttributeTypeNames() { + return MappingTools.getCollectionTypeNames(); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkBasicMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkBasicMapping.java index 7bb026f..aea1b4c 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkBasicMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkBasicMapping.java @@ -198,4 +198,26 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected Iterable getCandidateAttributeTypeNames() { + return MappingTools.getAllBasicTypeNames(); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConverterContainerImpl.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConverterContainerImpl.java index 34f83c6..b4074c0 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConverterContainerImpl.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConverterContainerImpl.java @@ -621,4 +621,27 @@ public XmlContextNode getParent() { return (XmlContextNode) super.getParent(); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + for (OrmEclipseLinkCustomConverter converter : this.customConverterContainer.getContextElements()) { + result = converter.getCompletionProposals(pos); + if (result != null) { + return result; + } + } + for (OrmEclipseLinkStructConverter converter : this.structConverterContainer.getContextElements()) { + result = converter.getCompletionProposals(pos); + if (result != null) { + return result; + } + } + return null; + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomConverter.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomConverter.java index 88f7523..c005924 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomConverter.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomConverter.java @@ -12,6 +12,7 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkCustomConverter; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.java.JavaEclipseLinkCustomConverter; @@ -83,4 +84,26 @@ super.convertFrom(javaConverter); this.setConverterClass(javaConverter.getFullyQualifiedConverterClass()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.converterClassNameTouches(pos)) { + return this.getCandidateClassNames(); + } + return null; + } + + protected Iterable getCandidateClassNames() { + return MappingTools.getSortedJavaTypeNames(this.getJavaProject()); + } + + protected boolean converterClassNameTouches(int pos) { + return this.xmlConverter.converterClassTouches(pos); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java index 6b0bd7b..c1ebdb5 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java @@ -19,6 +19,7 @@ import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementIterable; import org.eclipse.jpt.jpa.core.context.orm.EntityMappings; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; import org.eclipse.jpt.jpa.core.resource.orm.XmlClassReference; @@ -316,4 +317,26 @@ XmlClassReference xmlClassRef = this.getXmlCustomizerClassRef(); return (xmlClassRef == null) ? null : xmlClassRef.getClassNameTextRange(); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.customizerClassTouches(pos)) { + return this.getCandidateClassNames(); + } + return null; + } + + protected Iterable getCandidateClassNames() { + return MappingTools.getSortedJavaTypeNames(this.getJavaProject()); + } + + protected boolean customizerClassTouches(int pos) { + return this.getXmlCustomizerClassRef()== null? false : this.getXmlCustomizerClassRef().classNameTouches(pos); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java index 9107b56..b5d52c2 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java @@ -14,6 +14,7 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; @@ -26,9 +27,10 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkCustomizer; import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkEmbeddable; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkEmbeddable; -import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkDynamicTypeMappingValidator; @@ -285,4 +287,34 @@ protected TextRange getParentClassTextRange() { return this.getValidationTextRange(this.xmlTypeMapping.getParentClassTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + result = this.customizer.getCompletionProposals(pos); + if (result != null) { + return result; + } + result = this.converterContainer.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.xmlTypeMapping.parentClassTouches(pos)) { + return this.getCandidateParentClassNames(); + } + return null; + } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateParentClassNames() { + return new CompositeIterable( + this.getCandidateClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedIdMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedIdMapping.java index 3d9643a..a7c0eb2 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedIdMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedIdMapping.java @@ -13,10 +13,14 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.StringTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.AbstractOrmEmbeddedIdMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlEmbeddedId; @@ -90,4 +94,30 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateAttributeTypeNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } \ No newline at end of file diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedMapping.java index bbfb4b7..1fd08c3 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddedMapping.java @@ -13,10 +13,14 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.StringTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.AbstractOrmEmbeddedMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlEmbedded; @@ -89,4 +93,30 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateAttributeTypeNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } \ No newline at end of file diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java index 4578fca..68283ca 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java @@ -16,6 +16,7 @@ import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; import org.eclipse.jpt.common.core.resource.java.JavaResourceType; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; @@ -40,14 +41,14 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkEntity; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLink2_3JpaPlatformFactory; -import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaPlatformFactory.EclipseLinkJpaPlatformVersion; +import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkDynamicTypeMappingValidator; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkEntityPrimaryKeyValidator; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkTypeMappingValidator; -import org.eclipse.jpt.jpa.eclipselink.core.internal.plugin.JptJpaEclipseLinkCorePlugin; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkClassExtractorAnnotation2_1; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlEntity; import org.eclipse.text.edits.ReplaceEdit; @@ -467,6 +468,7 @@ // ********** completion proposals ********** + @Override public Iterable getCompletionProposals(int pos) { Iterable result = super.getCompletionProposals(pos); @@ -477,7 +479,32 @@ if (result != null) { return result; } + result = this.customizer.getCompletionProposals(pos); + if (result != null) { + return result; + } + result = this.converterContainer.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.xmlTypeMapping.parentClassTouches(pos)) { + return this.getCandidateParentClassNames(); + } + if (this.classExtractorTouches(pos)) { + return this.getCandidateClassNames(); + } return null; } + @SuppressWarnings("unchecked") + protected Iterable getCandidateParentClassNames() { + return new CompositeIterable( + super.getCandidateClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } + + protected boolean classExtractorTouches(int pos) { + return this.getXmlClassExtractor() == null? false : this.getXmlClassExtractor().classNameTouches(pos); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkIdMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkIdMapping.java index c6373d4..ab420f6 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkIdMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkIdMapping.java @@ -195,4 +195,26 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected Iterable getCandidateAttributeTypeNames() { + return MappingTools.getPrimaryBasicTypeNames(); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToManyMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToManyMapping.java index 0910c4d..945ee21 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToManyMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToManyMapping.java @@ -14,15 +14,18 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmManyToManyMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkJoinFetch; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkManyToManyMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmConvertibleMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlManyToMany; @@ -179,4 +182,44 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected Iterable getCandidateAttributeTypeNames() { + return MappingTools.getCollectionTypeNames(); + } + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateTargetEntityClassNames() { + return new CompositeIterable( + super.getCandidateTargetEntityClassNames(), + ((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames() + ); + } + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateMapKeyClassNames() { + return new CompositeIterable( + super.getCandidateMapKeyClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToOneMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToOneMapping.java index 381c08a..28874d5 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToOneMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkManyToOneMapping.java @@ -10,10 +10,13 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; import java.util.List; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmManyToOneMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkJoinFetch; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkRelationshipMapping; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlManyToOne; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -60,4 +63,15 @@ super.validate(messages, reporter); // TODO - join fetch validation } + + // ********** completion proposals ********** + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateTargetEntityClassNames() { + return new CompositeIterable( + super.getCandidateTargetEntityClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java index 978b9ca..6c90fa7 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java @@ -14,6 +14,7 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; @@ -31,15 +32,16 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkCustomizer; import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkMappedSuperclass; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkCaching; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3; -import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLink2_3JpaPlatformFactory; -import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaPlatformFactory.EclipseLinkJpaPlatformVersion; +import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkDynamicTypeMappingValidator; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkMappedSuperclassPrimaryKeyValidator; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkMappedSuperclassValidator; @@ -424,6 +426,25 @@ if (result != null) { return result; } + result = this.customizer.getCompletionProposals(pos); + if (result != null) { + return result; + } + result = this.converterContainer.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.xmlTypeMapping.parentClassTouches(pos)) { + return this.getCandidateParentClassNames(); + } return null; } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateParentClassNames() { + return new CompositeIterable( + this.getCandidateClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToManyMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToManyMapping.java index 4468c91..4ba01dd 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToManyMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToManyMapping.java @@ -14,9 +14,11 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmOneToManyMapping; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmOneToManyRelationship2_0; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType; @@ -26,6 +28,7 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmConvertibleMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmOneToManyRelationship2_0; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlOneToMany; @@ -210,4 +213,44 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected Iterable getCandidateAttributeTypeNames() { + return MappingTools.getCollectionTypeNames(); + } + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateTargetEntityClassNames() { + return new CompositeIterable( + super.getCandidateTargetEntityClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateMapKeyClassNames() { + return new CompositeIterable( + super.getCandidateMapKeyClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToOneMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToOneMapping.java index fba1268..bde0711 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToOneMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkOneToOneMapping.java @@ -10,11 +10,14 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; import java.util.List; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmOneToOneMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkJoinFetch; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkOneToOneMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkPrivateOwned; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlOneToOne; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -73,4 +76,15 @@ super.validate(messages, reporter); // TODO - private owned, join fetch validation } + + // ********** completion proposals ********** + + @Override + @SuppressWarnings("unchecked") + protected Iterable getCandidateTargetEntityClassNames() { + return new CompositeIterable( + super.getCandidateTargetEntityClassNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructConverter.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructConverter.java index 5ea9b0b..4a82efa 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructConverter.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructConverter.java @@ -12,6 +12,7 @@ import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkStructConverter; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.java.JavaEclipseLinkStructConverter; @@ -83,4 +84,26 @@ super.convertFrom(javaConverter); this.setConverterClass(javaConverter.getConverterClass()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.converterClassNameTouches(pos)) { + return this.getCandidateClassNames(); + } + return null; + } + + protected Iterable getCandidateClassNames() { + return MappingTools.getSortedJavaTypeNames(this.getJavaProject()); + } + + protected boolean converterClassNameTouches(int pos) { + return this.xmlConverter.converterClassTouches(pos); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructureMapping2_3.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructureMapping2_3.java index eb9be0e..f3db6c4 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructureMapping2_3.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkStructureMapping2_3.java @@ -9,11 +9,15 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmAttributeMapping; import org.eclipse.jpt.jpa.eclipselink.core.EclipseLinkMappingKeys; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkStructureMapping2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.Attributes; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlStructure; @@ -60,4 +64,30 @@ public void removeXmlAttributeMappingFrom(org.eclipse.jpt.jpa.core.resource.orm.Attributes xmlAttributes) { ((Attributes) xmlAttributes).getStructures().remove(this.xmlAttributeMapping); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateAttributeTypeNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkTransformationMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkTransformationMapping.java index 8bb804a..6a9067f 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkTransformationMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkTransformationMapping.java @@ -9,11 +9,15 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmAttributeMapping; import org.eclipse.jpt.jpa.eclipselink.core.EclipseLinkMappingKeys; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkTransformationMapping; +import org.eclipse.jpt.jpa.eclipselink.core.context.persistence.EclipseLinkPersistenceUnit; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.Attributes; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlTransformation; @@ -60,4 +64,32 @@ public void removeXmlAttributeMappingFrom(org.eclipse.jpt.jpa.core.resource.orm.Attributes xmlAttributes) { ((Attributes) xmlAttributes).getTransformations().remove(this.xmlAttributeMapping); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + @SuppressWarnings("unchecked") + protected Iterable getCandidateAttributeTypeNames() { + return new CompositeIterable( + MappingTools.getSortedJavaTypeNames(getJavaProject()), + MappingTools.getPrimaryBasicTypeNames(), + MappingTools.getCollectionTypeNames(), + CollectionTools.sort(((EclipseLinkPersistenceUnit) this.getPersistenceUnit()).getEclipseLinkDynamicPersistentTypeNames()) + ); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVariableOneToOneMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVariableOneToOneMapping.java index 0e7351c..9f0149e 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVariableOneToOneMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVariableOneToOneMapping.java @@ -11,6 +11,7 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmAttributeMapping; import org.eclipse.jpt.jpa.eclipselink.core.EclipseLinkMappingKeys; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkVariableOneToOneMapping; @@ -44,4 +45,26 @@ public void removeXmlAttributeMappingFrom(org.eclipse.jpt.jpa.core.resource.orm.Attributes xmlAttributes) { ((Attributes) xmlAttributes).getVariableOneToOnes().remove(this.xmlAttributeMapping); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.targetInterfaceTouches(pos)) { + return this.getCandidateTargetInterfaceNames(); + } + return null; + } + + protected boolean targetInterfaceTouches(int pos) { + return this.xmlAttributeMapping.targetInterfaceTouches(pos); + } + + protected Iterable getCandidateTargetInterfaceNames() { + return MappingTools.getSortedJavaTypeNames(getJavaProject()); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVersionMapping.java src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVersionMapping.java index 036b8b0..d959261 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVersionMapping.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkVersionMapping.java @@ -9,8 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; +import java.sql.Timestamp; +import java.util.ArrayList; import java.util.List; - import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.internal.utility.JDTTools; @@ -206,4 +207,34 @@ protected TextRange getAttributeTypeTextRange() { return this.getValidationTextRange(this.xmlAttributeMapping.getAttributeTypeTextRange()); } + + // ********** completion proposals ********** + + @Override + public Iterable getCompletionProposals(int pos) { + Iterable result = super.getCompletionProposals(pos); + if (result != null) { + return result; + } + if (this.attributeTypeTouches(pos)) { + return this.getCandidateAttributeTypeNames(); + } + return null; + } + + protected boolean attributeTypeTouches(int pos) { + return this.xmlAttributeMapping.attributeTypeTouches(pos); + } + + protected Iterable getCandidateAttributeTypeNames() { + List names = new ArrayList(); + names.add(int.class.getName()); + names.add(Integer.class.getSimpleName()); + names.add(short.class.getName()); + names.add(Short.class.getSimpleName()); + names.add(long.class.getName()); + names.add(Long.class.getSimpleName()); + names.add(Timestamp.class.getName()); + return names; + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java index 105a4a6..4c6c17b 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java @@ -1301,6 +1301,24 @@ return (textRange != null) && (textRange.touches(pos)); } + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_3.ARRAY__ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + + public TextRange getTargetClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_3.ARRAY__TARGET_CLASS); + } + + public boolean targetClassTouches(int pos) { + TextRange textRange = this.getTargetClassCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + // ******** virtual attribute ************ public void setVirtualAttributeTypes(String attributeType, String targetClass) { diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java index b91bb27..4ea7fea 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java @@ -1755,6 +1755,15 @@ return (textRange != null) && (textRange.touches(pos)); } + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + // ******** virtual attribute ************ public void setVirtualAttributeTypes(String attributeType, String targetType) { diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicCollection.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicCollection.java index f73e7f0..48c088e 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicCollection.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicCollection.java @@ -529,4 +529,15 @@ public void setVirtualAttributeTypes(String attributeType, String targetType) { this.setAttributeType(attributeType); } + + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicMap.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicMap.java index d755c8b..59a542e 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicMap.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasicMap.java @@ -529,4 +529,15 @@ public void setVirtualAttributeTypes(String attributeType, String targetType) { this.setAttributeType(attributeType); } + + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConverter.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConverter.java index 4461506..eebfd52 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConverter.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConverter.java @@ -253,4 +253,14 @@ return new ReplaceEdit(offset, packageLength, newPackageName); } + // ********** content assist *************** + + public TextRange getConverterClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink.CONVERTER__CLASS); + } + + public boolean converterClassTouches(int pos) { + TextRange textRange = this.getConverterClassCodeAssistTextRange(); + return (textRange != null) && textRange.touches(pos); + } } // XmlConverter diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java index 18ebb3f..255ad31 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java @@ -2405,6 +2405,15 @@ return (textRange != null) && (textRange.touches(pos)); } + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + // ******** virtual attribute ************ public void setVirtualAttributeTypes(String attributeType, String targetClass) { diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java index f24a9aa..04d6f2e 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java @@ -1715,4 +1715,14 @@ return XmlNoSql.buildTranslator(EclipseLink2_4.NO_SQL, EclipseLinkOrmV2_4Package.eINSTANCE.getXmlEmbeddable_2_4_NoSql()); } + // *********** content assist ************ + + public TextRange getParentClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.PARENT_CLASS); + } + + public boolean parentClassTouches(int pos) { + TextRange textRange = this.getParentClassCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbedded.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbedded.java index 3db0bea..50f3183 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbedded.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbedded.java @@ -569,4 +569,15 @@ this.setAttributeType(attributeType); } + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddedId.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddedId.java index 0087894..88825fa 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddedId.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddedId.java @@ -462,4 +462,15 @@ this.setAttributeType(attributeType); } + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java index cc3bbe9..4aaa925 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java @@ -3985,4 +3985,15 @@ protected static Translator buildNoSqlTranslator() { return XmlNoSql.buildTranslator(EclipseLink2_4.NO_SQL, EclipseLinkOrmV2_4Package.eINSTANCE.getXmlEntity_2_4_NoSql()); } + + // *********** content assist ************ + + public TextRange getParentClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.PARENT_CLASS); + } + + public boolean parentClassTouches(int pos) { + TextRange textRange = this.getParentClassCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java index 8aabb7e..a37cb0c 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java @@ -1309,4 +1309,15 @@ public void setVirtualAttributeTypes(String attributeType, String targetType) { this.setAttributeType(attributeType); } + + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlManyToMany.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlManyToMany.java index c3e22ad..685591f 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlManyToMany.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlManyToMany.java @@ -2115,4 +2115,15 @@ this.setAttributeType(attributeType); this.setTargetEntity(targetEntity); } + + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java index 7428a0a..cd7c996 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java @@ -4122,4 +4122,15 @@ protected static Translator buildUuidGeneratorTranslator() { return XmlUuidGenerator.buildTranslator(EclipseLink2_4.UUID_GENERATOR, EclipseLinkOrmV2_4Package.eINSTANCE.getXmlGeneratorContainer2_4_UuidGenerator()); } + + // *********** content assist ************ + + public TextRange getParentClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.PARENT_CLASS); + } + + public boolean parentClassTouches(int pos) { + TextRange textRange = this.getParentClassCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlOneToMany.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlOneToMany.java index 6203eb5..f612ab7 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlOneToMany.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlOneToMany.java @@ -2278,4 +2278,15 @@ this.setAttributeType(attributeType); this.setTargetEntity(targetEntity); } + + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructConverter.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructConverter.java index 9b2715f..7d86003 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructConverter.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructConverter.java @@ -257,4 +257,15 @@ int offset = getAttributeNode(EclipseLink.STRUCT_CONVERTER__CONVERTER).getValueRegionStartOffset() + 1; // +1 = opening double quote return new ReplaceEdit(offset, packageLength, newPackageName); } + + // ********** content assist *************** + + public TextRange getConverterClassCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink.STRUCT_CONVERTER__CONVERTER); + } + + public boolean converterClassTouches(int pos) { + TextRange textRange = this.getConverterClassCodeAssistTextRange(); + return (textRange != null) && textRange.touches(pos); + } } // XmlStructConverter diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructure.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructure.java index bbe016f..d083d02 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructure.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlStructure.java @@ -471,4 +471,15 @@ public void setVirtualAttributeTypes(String attributeType, String targetType) { this.setAttributeType(attributeType); } + + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_3.STRUCTURE__ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } } // XmlStructure diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTransformation.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTransformation.java index 02279c2..205a216 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTransformation.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTransformation.java @@ -466,4 +466,15 @@ this.setAttributeType(attributeType); } + // *********** content assist ************ + + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVariableOneToOne.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVariableOneToOne.java index 5924728..73a57b8 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVariableOneToOne.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVariableOneToOne.java @@ -1379,4 +1379,15 @@ this.setTargetInterface(targetInterface); } + // *********** content assist ************ + + protected TextRange getTargetInterfaceCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink.VARIABLE_ONE_TO_ONE__TARGET_INTERFACE); + } + + public boolean targetInterfaceTouches(int pos) { + TextRange textRange = this.getTargetInterfaceCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + } diff --git src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java index 0ff1ffc..cb46b87 100644 --- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java +++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java @@ -987,6 +987,15 @@ return (textRange != null) && (textRange.touches(pos)); } + protected TextRange getAttributeTypeCodeAssistTextRange() { + return getAttributeCodeAssistTextRange(EclipseLink2_1.ATTRIBUTE_TYPE); + } + + public boolean attributeTypeTouches(int pos) { + TextRange textRange = this.getAttributeTypeCodeAssistTextRange(); + return (textRange != null) && (textRange.touches(pos)); + } + // ******** virtual attribute ************ public void setVirtualAttributeTypes(String attributeType, String targetType) {