IGNITE-61 - Direct marshalling

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

Branch: refs/heads/sprint-1
Commit: 215268fe5c8461c65fc93868e21bba45e415072d
Parents: 39fcfb6
Author: Valentin Kulichenko <vkuliche...@gridgain.com>
Authored: Sat Feb 7 22:17:36 2015 -0800
Committer: Valentin Kulichenko <vkuliche...@gridgain.com>
Committed: Sat Feb 7 22:17:36 2015 -0800

----------------------------------------------------------------------
 .../CommunicationMessageCodeGenerator.java      | 65 +++++++++-----------
 .../internal/direct/DirectByteBufferStream.java | 13 ++--
 .../internal/direct/DirectMessageReader.java    | 12 ++--
 .../extensions/communication/MessageReader.java |  6 +-
 4 files changed, 46 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/215268fe/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
 
b/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
index b8c6aa9..45a383c 100644
--- 
a/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
+++ 
b/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
@@ -449,7 +449,7 @@ public class CommunicationMessageCodeGenerator {
         indent++;
 
         returnFalseIfReadFailed(field.getType(), field.getName(), colAnn != 
null ? colAnn.value() : null,
-            mapAnn != null ? mapAnn.keyType() : null, mapAnn != null ? 
mapAnn.valueType() : null, false);
+            mapAnn != null ? mapAnn.keyType() : null, mapAnn != null ? 
mapAnn.valueType() : null);
 
         read.add(EMPTY);
         read.add(builder().a(STATE_VAR).a("++;").toString());
@@ -543,75 +543,72 @@ public class CommunicationMessageCodeGenerator {
      * @param colItemType Collection item type.
      * @param mapKeyType Map key type.
      * @param mapValType Map value type.
-     * @param raw Raw read flag.
      */
     private void returnFalseIfReadFailed(Class<?> type, @Nullable String name, 
@Nullable Class<?> colItemType,
-        @Nullable Class<?> mapKeyType, @Nullable Class<?> mapValType, boolean 
raw) {
+        @Nullable Class<?> mapKeyType, @Nullable Class<?> mapValType) {
         assert type != null;
 
-        String field = raw ? "null" : '"' + name + '"';
-
-        String retType = type.getSimpleName();
+        String field = '"' + name + '"';
 
         if (type == byte.class)
-            returnFalseIfReadFailed("byte", name, "reader.readByte", field);
+            returnFalseIfReadFailed(name, "reader.readByte", field);
         else if (type == short.class)
-            returnFalseIfReadFailed("short", name, "reader.readShort", field);
+            returnFalseIfReadFailed(name, "reader.readShort", field);
         else if (type == int.class)
-            returnFalseIfReadFailed("int", name, "reader.readInt", field);
+            returnFalseIfReadFailed(name, "reader.readInt", field);
         else if (type == long.class)
-            returnFalseIfReadFailed("long", name, "reader.readLong", field);
+            returnFalseIfReadFailed(name, "reader.readLong", field);
         else if (type == float.class)
-            returnFalseIfReadFailed("float", name, "reader.readFloat", field);
+            returnFalseIfReadFailed(name, "reader.readFloat", field);
         else if (type == double.class)
-            returnFalseIfReadFailed("double", name, "reader.readDouble", 
field);
+            returnFalseIfReadFailed(name, "reader.readDouble", field);
         else if (type == char.class)
-            returnFalseIfReadFailed("char", name, "reader.readChar", field);
+            returnFalseIfReadFailed(name, "reader.readChar", field);
         else if (type == boolean.class)
-            returnFalseIfReadFailed("boolean", name, "reader.readBoolean", 
field);
+            returnFalseIfReadFailed(name, "reader.readBoolean", field);
         else if (type == byte[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readByteArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readByteArray", field);
         else if (type == short[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readShortArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readShortArray", field);
         else if (type == int[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readIntArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readIntArray", field);
         else if (type == long[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readLongArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readLongArray", field);
         else if (type == float[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readFloatArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readFloatArray", field);
         else if (type == double[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readDoubleArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readDoubleArray", field);
         else if (type == char[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readCharArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readCharArray", field);
         else if (type == boolean[].class)
-            returnFalseIfReadFailed(retType, name, "reader.readBooleanArray", 
field);
+            returnFalseIfReadFailed(name, "reader.readBooleanArray", field);
         else if (type == String.class)
-            returnFalseIfReadFailed(retType, name, "reader.readString", field);
+            returnFalseIfReadFailed(name, "reader.readString", field);
         else if (type == BitSet.class)
-            returnFalseIfReadFailed(retType, name, "reader.readBitSet", field);
+            returnFalseIfReadFailed(name, "reader.readBitSet", field);
         else if (type == UUID.class)
-            returnFalseIfReadFailed(retType, name, "reader.readUuid", field);
+            returnFalseIfReadFailed(name, "reader.readUuid", field);
         else if (type == IgniteUuid.class)
-            returnFalseIfReadFailed(retType, name, "reader.readGridUuid", 
field);
+            returnFalseIfReadFailed(name, "reader.readIgniteUuid", field);
         else if (type.isEnum())
-            returnFalseIfReadFailed(retType, name, "reader.readEnum", field, 
retType + ".class");
+            returnFalseIfReadFailed(name, "reader.readEnum", field, 
type.getSimpleName() + ".class");
         else if (BASE_CLS.isAssignableFrom(type))
-            returnFalseIfReadFailed(retType, name, "reader.readMessage", 
field);
+            returnFalseIfReadFailed(name, "reader.readMessage", field);
         else if (type.isArray()) {
-            returnFalseIfReadFailed(retType, name, "reader.readObjectArray", 
field,
+            returnFalseIfReadFailed(name, "reader.readObjectArray", field,
                 type.getComponentType().getSimpleName() + ".class");
         }
         else if (Collection.class.isAssignableFrom(type)) {
             assert colItemType != null;
 
-            returnFalseIfReadFailed(retType, name, "reader.readCollection", 
field,
+            returnFalseIfReadFailed(name, "reader.readCollection", field,
                 colItemType.getSimpleName() + ".class");
         }
         else if (Map.class.isAssignableFrom(type)) {
             assert mapKeyType != null;
             assert mapValType != null;
 
-            returnFalseIfReadFailed(retType, name, "reader.readMap", field, 
mapKeyType.getSimpleName() + ".class",
+            returnFalseIfReadFailed(name, "reader.readMap", field, 
mapKeyType.getSimpleName() + ".class",
                 mapValType.getSimpleName() + ".class");
         }
         else
@@ -619,13 +616,11 @@ public class CommunicationMessageCodeGenerator {
     }
 
     /**
-     * @param retType Return type.
      * @param var Variable name.
      * @param mtd Method name.
      * @param args Method arguments.
      */
-    private void returnFalseIfReadFailed(String retType, String var, String 
mtd, @Nullable String... args) {
-        assert retType != null;
+    private void returnFalseIfReadFailed(String var, String mtd, @Nullable 
String... args) {
         assert mtd != null;
 
         String argsStr = "";
@@ -640,7 +635,7 @@ public class CommunicationMessageCodeGenerator {
         read.add(builder().a(var).a(" = 
").a(mtd).a("(").a(argsStr).a(");").toString());
         read.add(EMPTY);
 
-        read.add(builder().a("if (!reader.lastRead())").toString());
+        read.add(builder().a("if (!reader.isLastRead())").toString());
 
         indent++;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/215268fe/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectByteBufferStream.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectByteBufferStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectByteBufferStream.java
index e674861..3234a64 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectByteBufferStream.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectByteBufferStream.java
@@ -845,16 +845,17 @@ public class DirectByteBufferStream {
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends Enum<T>> Enum<T> readEnum(Class<T> enumCls) {
+    public <T extends Enum<T>> T readEnum(Class<T> enumCls) {
         byte ord = readByte();
 
-        return ord >= 0 ? (Enum<T>)GridEnumCache.get(enumCls)[ord] : null;
+        return ord >= 0 ? (T)GridEnumCache.get(enumCls)[ord] : null;
     }
 
     /**
      * @return Message.
      */
-    public MessageAdapter readMessage() {
+    @SuppressWarnings("unchecked")
+    public <T extends MessageAdapter> T readMessage() {
         if (!msgTypeDone) {
             if (!buf.hasRemaining()) {
                 lastFinished = false;
@@ -877,7 +878,7 @@ public class DirectByteBufferStream {
             msgTypeDone = false;
             msg = null;
 
-            return msg0;
+            return (T)msg0;
         }
         else
             return null;
@@ -926,7 +927,7 @@ public class DirectByteBufferStream {
     }
 
     @SuppressWarnings("unchecked")
-    public <T> Collection<T> readCollection(Class<T> itemCls) {
+    public <C extends Collection<T>, T> C readCollection(Class<T> itemCls) {
         if (readSize == -1) {
             int size = readInt();
 
@@ -964,7 +965,7 @@ public class DirectByteBufferStream {
 
         col = null;
 
-        return col0;
+        return (C)col0;
     }
 
     @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/215268fe/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
index 3875cfe..f0efbae 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
@@ -227,8 +227,8 @@ public class DirectMessageReader implements MessageReader {
     }
 
     /** {@inheritDoc} */
-    @Override public <T extends Enum<T>> Enum<T> readEnum(String name, 
Class<T> enumCls) {
-        Enum<T> val = stream.readEnum(enumCls);
+    @Override public <T extends Enum<T>> T readEnum(String name, Class<T> 
enumCls) {
+        T val = stream.readEnum(enumCls);
 
         lastRead = stream.lastFinished();
 
@@ -236,8 +236,8 @@ public class DirectMessageReader implements MessageReader {
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public MessageAdapter readMessage(String name) {
-        MessageAdapter msg = stream.readMessage();
+    @Nullable @Override public <T extends MessageAdapter> T readMessage(String 
name) {
+        T msg = stream.readMessage();
 
         lastRead = stream.lastFinished();
 
@@ -254,8 +254,8 @@ public class DirectMessageReader implements MessageReader {
     }
 
     /** {@inheritDoc} */
-    @Override public <T> Collection<T> readCollection(String name, Class<T> 
itemCls) {
-        Collection<T> col = stream.readCollection(itemCls);
+    @Override public <C extends Collection<T>, T> C readCollection(String 
name, Class<T> itemCls) {
+        C col = stream.readCollection(itemCls);
 
         lastRead = stream.lastFinished();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/215268fe/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
index fa4ca66..eca6afb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
@@ -60,13 +60,13 @@ public interface MessageReader {
 
     public IgniteUuid readIgniteUuid(String name);
 
-    public <T extends Enum<T>> Enum<T> readEnum(String name, Class<T> enumCls);
+    public <T extends Enum<T>> T readEnum(String name, Class<T> enumCls);
 
-    public MessageAdapter readMessage(String name);
+    public <T extends MessageAdapter> T readMessage(String name);
 
     public <T> T[] readObjectArray(String name, Class<T> itemCls);
 
-    public <T> Collection<T> readCollection(String name, Class<T> itemCls);
+    public <C extends Collection<T>, T> C readCollection(String name, Class<T> 
itemCls);
 
     public <K, V> Map<K, V> readMap(String name, Class<K> keyCls, Class<V> 
valCls);
 

Reply via email to