Author: hthomann
Date: Wed Apr 17 23:18:05 2013
New Revision: 1469097

URL: http://svn.apache.org/r1469097
Log:
OPENJPA-2025: Byte[] and Char[] should be treated as SingularAttributes, not 
lists by the metamodel generator  - merged Mike Dick's trunk changes to 2.1.x

Modified:
    openjpa/branches/2.1.x/   (props changed)
    
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
    
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java

Propchange: openjpa/branches/2.1.x/
------------------------------------------------------------------------------
  Merged /openjpa/trunk:r1143520

Modified: 
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java?rev=1469097&r1=1469096&r2=1469097&view=diff
==============================================================================
--- 
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
 (original)
+++ 
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
 Wed Apr 17 23:18:05 2013
@@ -48,6 +48,7 @@ import javax.tools.JavaFileObject;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.meta.MetaDataFactory;
 import org.apache.openjpa.persistence.PersistenceMetaDataFactory;
+import org.apache.openjpa.persistence.PersistentCollection;
 import org.apache.openjpa.persistence.util.SourceCode;
 
 
@@ -164,9 +165,10 @@ public class AnnotationProcessor6 extend
      *  
      */
     private TypeCategory toMetaModelTypeCategory(TypeMirror mirror, 
-        String name) {
-        if (mirror.getKind() == TypeKind.ARRAY)
+        String name, boolean persistentCollection) {   
+        if (mirror.getKind() == TypeKind.ARRAY && persistentCollection ) {
             return TypeCategory.LIST;
+        }
         if (CLASSNAMES_COLLECTION.contains(name))
             return TypeCategory.COLLECTION;
         if (CLASSNAMES_LIST.contains(name))
@@ -240,10 +242,13 @@ public class AnnotationProcessor6 extend
             Set<? extends Element> members = handler.getPersistentMembers(e);
             
             for (Element m : members) {
+                boolean isPersistentCollection = 
m.getAnnotation(PersistentCollection.class) != null; 
+                
                 TypeMirror decl  = handler.getDeclaredType(m);
                 String fieldName = handler.getPersistentMemberName(m);
-                String fieldType = handler.getDeclaredTypeName(decl);
-                TypeCategory typeCategory = toMetaModelTypeCategory(decl, 
fieldType);
+                String fieldType = handler.getDeclaredTypeName(decl, true, 
isPersistentCollection);  
+                TypeCategory typeCategory =
+                    toMetaModelTypeCategory(decl, fieldType, 
isPersistentCollection);
                 String metaModelType = typeCategory.getMetaModelType();
                 SourceCode.Field modelField = null;
                 switch (typeCategory) {

Modified: 
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java?rev=1469097&r1=1469096&r2=1469097&view=diff
==============================================================================
--- 
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java
 (original)
+++ 
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java
 Wed Apr 17 23:18:05 2013
@@ -549,6 +549,10 @@ public class SourceAnnotationHandler 
        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
      * mirror is primitive then returns the corresponding boxed class name.
@@ -557,12 +561,17 @@ public class SourceAnnotationHandler 
      * <code>java.util.Set&lt;java.lang.String&gt;</code> this method will 
      * 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)
             return "java.lang.Object";
        if (mirror.getKind() == TypeKind.ARRAY) {
-               TypeMirror comp = ((ArrayType)mirror).getComponentType();
-               return getDeclaredTypeName(comp, false);
+           if(persistentCollection) { 
+               TypeMirror comp = ((ArrayType)mirror).getComponentType();
+               return getDeclaredTypeName(comp, false);
+           }
+           else { 
+               return mirror.toString();
+           }
        }
        mirror = box ? box(mirror) : mirror;
        if (isPrimitive(mirror))


Reply via email to