fixed issue with autoboxing

This commit is contained in:
Rob Austin
2014-12-16 23:02:14 +00:00
parent 9d92b28251
commit 8343eba0c4
@@ -821,7 +821,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
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<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
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<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
} 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<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
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;