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:
Michael Dick 2011-07-06 18:18:43 +00:00
parent 928aa703cb
commit ff4dc0c5ce
2 changed files with 21 additions and 7 deletions

View File

@ -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) {

View File

@ -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&lt;java.lang.String&gt;</code> this method will * <code>java.util.Set&lt;java.lang.String&gt;</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))