mirror of
https://github.com/apache/openjpa.git
synced 2025-03-06 08:29:08 +00:00
OPENJPA-2025: Generate SingularAttribute for unannotated arrays, ListAttribute will be used for @PersistentCollections.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@1143520 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
928aa703cb
commit
ff4dc0c5ce
@ -48,6 +48,7 @@ import javax.tools.JavaFileObject;
|
|||||||
import org.apache.openjpa.lib.util.Localizer;
|
import org.apache.openjpa.lib.util.Localizer;
|
||||||
import org.apache.openjpa.meta.MetaDataFactory;
|
import org.apache.openjpa.meta.MetaDataFactory;
|
||||||
import org.apache.openjpa.persistence.PersistenceMetaDataFactory;
|
import org.apache.openjpa.persistence.PersistenceMetaDataFactory;
|
||||||
|
import org.apache.openjpa.persistence.PersistentCollection;
|
||||||
import org.apache.openjpa.persistence.util.SourceCode;
|
import org.apache.openjpa.persistence.util.SourceCode;
|
||||||
|
|
||||||
|
|
||||||
@ -165,9 +166,10 @@ public class AnnotationProcessor6 extends AbstractProcessor {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private TypeCategory toMetaModelTypeCategory(TypeMirror mirror,
|
private TypeCategory toMetaModelTypeCategory(TypeMirror mirror,
|
||||||
String name) {
|
String name, boolean persistentCollection) {
|
||||||
if (mirror.getKind() == TypeKind.ARRAY)
|
if (mirror.getKind() == TypeKind.ARRAY && persistentCollection ) {
|
||||||
return TypeCategory.LIST;
|
return TypeCategory.LIST;
|
||||||
|
}
|
||||||
if (CLASSNAMES_COLLECTION.contains(name))
|
if (CLASSNAMES_COLLECTION.contains(name))
|
||||||
return TypeCategory.COLLECTION;
|
return TypeCategory.COLLECTION;
|
||||||
if (CLASSNAMES_LIST.contains(name))
|
if (CLASSNAMES_LIST.contains(name))
|
||||||
@ -241,10 +243,13 @@ public class AnnotationProcessor6 extends AbstractProcessor {
|
|||||||
Set<? extends Element> members = handler.getPersistentMembers(e);
|
Set<? extends Element> members = handler.getPersistentMembers(e);
|
||||||
|
|
||||||
for (Element m : members) {
|
for (Element m : members) {
|
||||||
|
boolean isPersistentCollection = m.getAnnotation(PersistentCollection.class) != null;
|
||||||
|
|
||||||
TypeMirror decl = handler.getDeclaredType(m);
|
TypeMirror decl = handler.getDeclaredType(m);
|
||||||
String fieldName = handler.getPersistentMemberName(m);
|
String fieldName = handler.getPersistentMemberName(m);
|
||||||
String fieldType = handler.getDeclaredTypeName(decl);
|
String fieldType = handler.getDeclaredTypeName(decl, true, isPersistentCollection);
|
||||||
TypeCategory typeCategory = toMetaModelTypeCategory(decl, fieldType);
|
TypeCategory typeCategory =
|
||||||
|
toMetaModelTypeCategory(decl, fieldType, isPersistentCollection);
|
||||||
String metaModelType = typeCategory.getMetaModelType();
|
String metaModelType = typeCategory.getMetaModelType();
|
||||||
SourceCode.Field modelField = null;
|
SourceCode.Field modelField = null;
|
||||||
switch (typeCategory) {
|
switch (typeCategory) {
|
||||||
|
@ -548,6 +548,10 @@ public class SourceAnnotationHandler
|
|||||||
return getDeclaredTypeName(mirror, true);
|
return getDeclaredTypeName(mirror, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getDeclaredTypeName(TypeMirror mirror, boolean box) {
|
||||||
|
return getDeclaredTypeName(mirror, box, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the element name of the class the given mirror represents. If the
|
* Get the element name of the class the given mirror represents. If the
|
||||||
* mirror is primitive then returns the corresponding boxed class name.
|
* mirror is primitive then returns the corresponding boxed class name.
|
||||||
@ -556,12 +560,17 @@ public class SourceAnnotationHandler
|
|||||||
* <code>java.util.Set<java.lang.String></code> this method will
|
* <code>java.util.Set<java.lang.String></code> this method will
|
||||||
* return <code>java.util.Set</code>.
|
* return <code>java.util.Set</code>.
|
||||||
*/
|
*/
|
||||||
String getDeclaredTypeName(TypeMirror mirror, boolean box) {
|
String getDeclaredTypeName(TypeMirror mirror, boolean box, boolean persistentCollection) {
|
||||||
if (mirror == null || mirror.getKind() == TypeKind.NULL || mirror.getKind() == TypeKind.WILDCARD)
|
if (mirror == null || mirror.getKind() == TypeKind.NULL || mirror.getKind() == TypeKind.WILDCARD)
|
||||||
return "java.lang.Object";
|
return "java.lang.Object";
|
||||||
if (mirror.getKind() == TypeKind.ARRAY) {
|
if (mirror.getKind() == TypeKind.ARRAY) {
|
||||||
TypeMirror comp = ((ArrayType)mirror).getComponentType();
|
if(persistentCollection) {
|
||||||
return getDeclaredTypeName(comp, false);
|
TypeMirror comp = ((ArrayType)mirror).getComponentType();
|
||||||
|
return getDeclaredTypeName(comp, false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return mirror.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mirror = box ? box(mirror) : mirror;
|
mirror = box ? box(mirror) : mirror;
|
||||||
if (isPrimitive(mirror))
|
if (isPrimitive(mirror))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user