From 8343eba0c4b0710b1824e1e4a217a0aeedd0c271 Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Tue, 16 Dec 2014 23:02:14 +0000 Subject: [PATCH] fixed issue with autoboxing --- .../chronicle/map/VanillaChronicleMap.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index 6fdfd2cb1..870d69db4 100755 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -821,7 +821,7 @@ class VanillaChronicleMap, case "chronicle-key": if (kClass.getCanonicalName().startsWith("net.openhft.lang.values")) { - return toNative(reader, vClass); + return to$$Native(reader, vClass); } else { long keySize = keySizeMarshaller.readSize(buffer); ThreadLocalCopies copies = keyReaderProvider.getCopies(null); @@ -831,7 +831,7 @@ class VanillaChronicleMap, case "chronicle-value": if (vClass.getCanonicalName().startsWith("net.openhft.lang.values")) { - return toNative(reader, vClass); + return to$$Native(reader, vClass); } else { long valueSize = valueSizeMarshaller.readSize(buffer); ThreadLocalCopies copies = valueReaderProvider.getCopies(null); @@ -859,7 +859,7 @@ class VanillaChronicleMap, } else return (E) unmarshallingContext.convertAnother(null, clazz); } - private Object toNative(HierarchicalStreamReader reader, final Class aClass) { + private Object to$$Native(HierarchicalStreamReader reader, final Class aClass) { Object o = DataValueClasses.newDirectInstance(aClass); try { @@ -870,17 +870,28 @@ class VanillaChronicleMap, Class parameterType = $$nativeMethod.getParameterTypes()[0]; String value = reader.getValue(); - if (parameterType.isPrimitive()) { - String name = parameterType.getSimpleName(); - String properName = "java.lang." + Character.toString(name - .charAt(0)).toUpperCase() - + name.substring(1); - parameterType = Class.forName(properName); + if (parameterType.isPrimitive()) { + + // convert the primitive to their boxed type + + if (parameterType == int.class) + parameterType = Integer.class; + else if (parameterType == char.class) + parameterType = Character.class; + else { + final String name = parameterType.getSimpleName(); + + final String properName = "java.lang." + Character.toString + (name.charAt(0)).toUpperCase() + + name.substring(1); + parameterType = Class.forName(properName); + } } - Method valueOf = parameterType.getMethod("valueOf", String.class); - Object invoke = valueOf.invoke(null, value); + + final Method valueOf = parameterType.getMethod("valueOf", String.class); + final Object invoke = valueOf.invoke(null, value); $$nativeMethod.invoke(o, invoke); return o;