java_gen: fix signedness issues with length
diff --git a/java_gen/java_type.py b/java_gen/java_type.py
index 7da6f6a..6acdb83 100644
--- a/java_gen/java_type.py
+++ b/java_gen/java_type.py
@@ -227,7 +227,8 @@
# FIXME: This list needs to be pruned / cleaned up. Most of these are schematic.
u8 = JType('short', 'byte') \
- .op(read='bb.readByte()', write='bb.writeByte($name)')
+ .op(read='U8.f(bb.readByte())', write='bb.writeByte(U8.t($name))', pub_type=True) \
+ .op(read='bb.readByte()', write='bb.writeByte($name)', pub_type=False)
u8_list = JType('List<U8>') \
.op(read='ChannelUtils.readList(bb, $length, U8.READER)', write='ChannelUtils.writeList(bb, $name)')
u16 = JType('int', 'short') \
diff --git a/java_gen/templates/of_class.java b/java_gen/templates/of_class.java
index aa68d04..8a8d09d 100644
--- a/java_gen/templates/of_class.java
+++ b/java_gen/templates/of_class.java
@@ -195,27 +195,30 @@
//:: elif prop.is_pad:
// pad: ${prop.length} bytes
bb.skipBytes(${prop.length});
-//:: elif prop.is_fixed_value:
- // fixed value property ${prop.name} == ${prop.value}
- ${prop.java_type.priv_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=False)};
- if(${prop.name} != ${prop.priv_value})
- throw new OFParseError("Wrong ${prop.name}: Expected=${prop.enum_value}(${prop.value}), got="+${prop.name});
//:: elif prop.is_length_value:
- ${prop.java_type.public_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=False)};
+ ${prop.java_type.public_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=True)};
+ //:: if prop.is_fixed_value:
+ if(${prop.name} != ${prop.value})
+ throw new OFParseError("Wrong ${prop.name}: Expected=${prop.enum_value}(${prop.value}), got="+${prop.name});
+ //:: else:
if(${prop.name} < MINIMUM_LENGTH)
throw new OFParseError("Wrong ${prop.name}: Expected to be >= " + MINIMUM_LENGTH + ", was: " + ${prop.name});
-//:: elif prop.is_field_length_value:
-//:: fields_with_length_member[prop.member.field_name] = prop.name
- int ${prop.name} = ${prop.java_type.read_op(version, pub_type=False)};
-//:: else:
- // fixme: todo ${prop.name}
-//:: #endif
-//:: if prop.is_length_value or prop.is_field_length_value:
+ //:: #endif
if(bb.readableBytes() + (bb.readerIndex() - start) < ${prop.name}) {
// Buffer does not have all data yet
bb.readerIndex(start);
return null;
}
+//:: elif prop.is_fixed_value:
+ // fixed value property ${prop.name} == ${prop.value}
+ ${prop.java_type.priv_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=False)};
+ if(${prop.name} != ${prop.priv_value})
+ throw new OFParseError("Wrong ${prop.name}: Expected=${prop.enum_value}(${prop.value}), got="+${prop.name});
+//:: elif prop.is_field_length_value:
+//:: fields_with_length_member[prop.member.field_name] = prop.name
+ ${prop.java_type.public_type} ${prop.name} = ${prop.java_type.read_op(version, pub_type=True)};
+//:: else:
+ // fixme: todo ${prop.name}
//:: #endif
//:: #endfor
//:: if msg.align: