You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mnemonic.apache.org by ga...@apache.org on 2017/04/17 22:36:31 UTC

incubator-mnemonic git commit: MNEMONIC-237: Incorrect offset for primitive type fields

Repository: incubator-mnemonic
Updated Branches:
  refs/heads/master ff7e648d4 -> c7ce58c21


MNEMONIC-237: Incorrect offset for primitive type fields


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/commit/c7ce58c2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/tree/c7ce58c2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/diff/c7ce58c2

Branch: refs/heads/master
Commit: c7ce58c21d90a95abcb1ed9e9c6e05a89bdf9737
Parents: ff7e648
Author: Johnu George <jo...@cisco.com>
Authored: Mon Apr 17 15:09:59 2017 -0700
Committer: Johnu George <jo...@cisco.com>
Committed: Mon Apr 17 15:09:59 2017 -0700

----------------------------------------------------------------------
 .../mnemonic/AnnotatedDurableEntityClass.java   | 62 +++++++++++---------
 1 file changed, 33 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/c7ce58c2/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java
----------------------------------------------------------------------
diff --git a/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java b/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java
index a6cbaf0..7b3d3cc 100644
--- a/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java
+++ b/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java
@@ -115,36 +115,40 @@ public class AnnotatedDurableEntityClass {
   private Map<String, MethodInfo> m_durablemtdinfo = new HashMap<String, MethodInfo>();
   private Map<String, MethodInfo> m_entitymtdinfo = new HashMap<String, MethodInfo>();
 
-  private long computeTypeSize(TypeMirror type) {
-    long ret;
-    switch (type.getKind()) {
-    case BYTE:
-      ret = 1L;
-      break;
-    case BOOLEAN:
-      ret = 1L;
-      break;
-    case CHAR:
-      ret = 2L;
-      break;
-    case DOUBLE:
-      ret = 8L;
-      break;
-    case FLOAT:
-      ret = 4L;
-      break;
-    case SHORT:
-      ret = 2L;
-      break;
-    case INT:
-      ret = 4L;
-      break;
-    case LONG:
-      ret = 8L;
-      break;
-    default:
+  private long computeTypeSize(TypeName tname) throws AnnotationProcessingException {
+    long ret = 0L;
+    if (isUnboxPrimitive(tname)) {
+      TypeName tn = unboxTypeName(tname);
+      if (tn.equals(TypeName.BOOLEAN)) {
+        ret = 1L;
+      }
+      if (tn.equals(TypeName.BYTE)) {
+        ret = 1L;
+      }
+      if (tn.equals(TypeName.CHAR)) {
+        ret = 2L;
+      }
+      if (tn.equals(TypeName.DOUBLE)) {
+        ret = 8L;
+      }
+      if (tn.equals(TypeName.FLOAT)) {
+        ret = 4L;
+      }
+      if (tn.equals(TypeName.INT)) {
+        ret = 4L;
+      }
+      if (tn.equals(TypeName.LONG)) {
+        ret = 8L;
+      }
+      if (tn.equals(TypeName.SHORT)) {
+        ret = 2L;
+      }
+    } else {
       ret = 8L;
     }
+    if (0L == ret) {
+      throw new AnnotationProcessingException(null, "%s is not supported for type names", tname.toString());
+    }
     return ret;
   }
 
@@ -280,7 +284,7 @@ public class AnnotatedDurableEntityClass {
           }
           fieldinfo.name = String.format("m_%s_%s", methodname.substring(3).toLowerCase(), Utils.genRandomString());
           fieldinfo.specbuilder = FieldSpec.builder(fieldinfo.type, fieldinfo.name, Modifier.PRIVATE);
-          fieldinfo.fieldsize = computeTypeSize(methodinfo.elem.getReturnType());
+          fieldinfo.fieldsize = computeTypeSize(TypeName.get(methodinfo.elem.getReturnType()));
           fieldinfo.fieldoff = fieldoff;
           fieldoff += fieldinfo.fieldsize;
           fieldinfo.efproxiesname = pgetter.EntityFactoryProxies();