diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java index 4f4504f7..b8e66d3d 100644 --- a/java/src/main/java/org/msgpack/MessagePack.java +++ b/java/src/main/java/org/msgpack/MessagePack.java @@ -22,6 +22,7 @@ import java.io.InputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.msgpack.util.codegen.DynamicTemplate; +import org.msgpack.util.codegen.DynamicOrdinalEnumTemplate; import org.msgpack.util.codegen.FieldList; public class MessagePack { @@ -146,17 +147,18 @@ public class MessagePack { } public static void register(Class target) { // auto-detect - // FIXME - //Template tmpl; - //if(List.isAssignableFrom(target)) { + Template tmpl; + if(target.isEnum()) { + tmpl = DynamicOrdinalEnumTemplate.create(target); + //} else if(List.isAssignableFrom(target)) { //} else if(Set.isAssignableFrom(target)) { //} else if(Map.isAssignableFrom(target)) { //} else if(Collection.isAssignableFrom(target)) { //} else if(BigInteger.isAssignableFrom(target)) { - //} else { - //} + } else { + tmpl = DynamicTemplate.create(target); + } - Template tmpl = DynamicTemplate.create(target); CustomPacker.register(target, tmpl); CustomConverter.register(target, tmpl); CustomUnpacker.register(target, tmpl); diff --git a/java/src/main/java/org/msgpack/annotation/MessagePackNullable.java b/java/src/main/java/org/msgpack/annotation/Nullable.java similarity index 95% rename from java/src/main/java/org/msgpack/annotation/MessagePackNullable.java rename to java/src/main/java/org/msgpack/annotation/Nullable.java index a3ec9a55..7a6f05fa 100644 --- a/java/src/main/java/org/msgpack/annotation/MessagePackNullable.java +++ b/java/src/main/java/org/msgpack/annotation/Nullable.java @@ -24,5 +24,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) -public @interface MessagePackNullable { +public @interface Nullable { } diff --git a/java/src/main/java/org/msgpack/annotation/MessagePackOptional.java b/java/src/main/java/org/msgpack/annotation/Optional.java similarity index 95% rename from java/src/main/java/org/msgpack/annotation/MessagePackOptional.java rename to java/src/main/java/org/msgpack/annotation/Optional.java index 9c1a0bb0..383ba959 100644 --- a/java/src/main/java/org/msgpack/annotation/MessagePackOptional.java +++ b/java/src/main/java/org/msgpack/annotation/Optional.java @@ -24,5 +24,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) -public @interface MessagePackOptional { -} \ No newline at end of file +public @interface Optional { +} diff --git a/java/src/main/java/org/msgpack/template/ClassTemplate.java b/java/src/main/java/org/msgpack/template/ClassTemplate.java index 52d9c1ae..7d1720d2 100644 --- a/java/src/main/java/org/msgpack/template/ClassTemplate.java +++ b/java/src/main/java/org/msgpack/template/ClassTemplate.java @@ -22,9 +22,8 @@ import org.msgpack.*; import org.msgpack.annotation.MessagePackDelegate; import org.msgpack.annotation.MessagePackMessage; import org.msgpack.annotation.MessagePackOrdinalEnum; -import org.msgpack.util.codegen.DynamicPacker; -import org.msgpack.util.codegen.DynamicConverter; -import org.msgpack.util.codegen.DynamicUnpacker; +import org.msgpack.util.codegen.DynamicTemplate; +import org.msgpack.util.codegen.DynamicOrdinalEnumTemplate; import java.util.*; import java.math.BigInteger; @@ -131,18 +130,17 @@ public class ClassTemplate implements Template { } if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { - packer = DynamicPacker.create(klass); + Template tmpl = DynamicTemplate.create(klass); + CustomMessage.register(klass, tmpl); + tmpl.pack(pk, o); + return; } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { // FIXME DelegatePacker throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { - // FIXME OrdinalEnumPacker - throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } - - if (packer != null) { - CustomPacker.register(klass, packer); - packer.pack(pk, o); + Template tmpl = DynamicOrdinalEnumTemplate.create(klass); + CustomMessage.register(klass, tmpl); + tmpl.pack(pk, o); return; } @@ -169,38 +167,32 @@ public class ClassTemplate implements Template { } if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { - unpacker = DynamicUnpacker.create(klass); + Template tmpl = DynamicTemplate.create(klass); + CustomMessage.register(klass, tmpl); + return tmpl.unpack(pac, to); } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { // TODO DelegateUnpacker throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { - // TODO OrdinalEnumUnpacker - throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } - - if (unpacker != null) { - CustomUnpacker.register(klass, unpacker); - return unpacker.unpack(pac, to); + Template tmpl = DynamicOrdinalEnumTemplate.create(klass); + CustomMessage.register(klass, tmpl); + return tmpl.unpack(pac, to); } // fallback - { - MessageConverter converter = null; + MessageConverter converter = null; - if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { - converter = DynamicConverter.create(klass); - } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { - // TODO DelegateConverter - throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { - // TODO OrdinalEnumConverter - throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } - - if (converter != null) { - CustomConverter.register(klass, converter); - return converter.convert(pac.unpackObject(), to); - } + if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { + Template tmpl = DynamicTemplate.create(klass); + CustomMessage.register(klass, tmpl); + return tmpl.convert(pac.unpackObject(), to); + } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { + // TODO DelegateConverter + throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); + } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { + Template tmpl = DynamicOrdinalEnumTemplate.create(klass); + CustomMessage.register(klass, tmpl); + return tmpl.convert(pac.unpackObject(), to); } throw new MessageTypeException(); @@ -232,18 +224,16 @@ public class ClassTemplate implements Template { } if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { - converter = DynamicConverter.create(klass); + Template tmpl = DynamicTemplate.create(klass); + CustomMessage.register(klass, tmpl); + return tmpl.convert(from, to); } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { // TODO DelegateConverter throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { - // TODO OrdinalEnumConverter - throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } - - if (converter != null) { - CustomConverter.register(klass, converter); - return converter.convert(from, to); + Template tmpl = DynamicOrdinalEnumTemplate.create(klass); + CustomMessage.register(klass, tmpl); + return tmpl.convert(from, to); } throw new MessageTypeException(); diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java index 2012dd9f..7296894e 100644 --- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java +++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java @@ -39,8 +39,8 @@ import org.msgpack.MessageTypeException; import org.msgpack.Packer; import org.msgpack.Template; import org.msgpack.Unpacker; -import org.msgpack.annotation.MessagePackOptional; -import org.msgpack.annotation.MessagePackNullable; +import org.msgpack.annotation.Optional; +import org.msgpack.annotation.Nullable; import org.msgpack.template.OptionalTemplate; import org.msgpack.template.NullableTemplate; import org.slf4j.Logger; @@ -290,11 +290,11 @@ class DynamicCodeGen extends DynamicCodeGenBase implements Constants { } else { tmpl = createTemplate(c); } - if (isAnnotated(field, MessagePackOptional.class)) { + if (isAnnotated(field, Optional.class)) { // @Optional types return new OptionalTemplate(tmpl); } - if (!c.isPrimitive() && isAnnotated(field, MessagePackNullable.class)) { + if (!c.isPrimitive() && isAnnotated(field, Nullable.class)) { // @Nullable reference types return new NullableTemplate(tmpl); } diff --git a/java/src/test/java/org/msgpack/TestAnnotations.java b/java/src/test/java/org/msgpack/TestAnnotations.java index d6eb3d8f..657ca28f 100644 --- a/java/src/test/java/org/msgpack/TestAnnotations.java +++ b/java/src/test/java/org/msgpack/TestAnnotations.java @@ -20,7 +20,7 @@ public class TestAnnotations extends TestCase { public String name; // required and nullable field. - @MessagePackNullable + @Nullable public String nickname; } @@ -29,11 +29,11 @@ public class TestAnnotations extends TestCase { public static class MyClassVersion2 { public String name; - @MessagePackNullable + @Nullable public String nickname; // adds an optional field on version 2. - @MessagePackOptional + @Optional public int age = -1; } @@ -42,7 +42,7 @@ public class TestAnnotations extends TestCase { public static class MyClassVersion3 { public String name; - @MessagePackNullable + @Nullable public String nickname; // adds required fields on version 3, then @@ -50,7 +50,7 @@ public class TestAnnotations extends TestCase { public int age; // optional field is nullable. - @MessagePackOptional + @Optional public String school; } diff --git a/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java b/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java index ab4aa57a..5d3f0fef 100644 --- a/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java +++ b/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java @@ -27,8 +27,8 @@ import org.msgpack.Packer; import org.msgpack.Template; import org.msgpack.Unpacker; import org.msgpack.annotation.MessagePackMessage; -import org.msgpack.annotation.MessagePackOptional; import org.msgpack.annotation.MessagePackOrdinalEnum; +import org.msgpack.annotation.Optional; import org.msgpack.packer.OptionalPacker; import org.msgpack.template.NullableTemplate; @@ -179,19 +179,19 @@ public class TestPackConvert extends TestCase { } public static class OptionalPrimitiveTypeFieldsClass { - @MessagePackOptional + @Optional public byte f0; - @MessagePackOptional + @Optional public short f1; - @MessagePackOptional + @Optional public int f2; - @MessagePackOptional + @Optional public long f3; - @MessagePackOptional + @Optional public float f4; - @MessagePackOptional + @Optional public double f5; - @MessagePackOptional + @Optional public boolean f6; public OptionalPrimitiveTypeFieldsClass() { @@ -384,27 +384,27 @@ public class TestPackConvert extends TestCase { } public static class OptionalGeneralReferenceTypeFieldsClass { - @MessagePackOptional + @Optional public Byte f0; - @MessagePackOptional + @Optional public Short f1; - @MessagePackOptional + @Optional public Integer f2; - @MessagePackOptional + @Optional public Long f3; - @MessagePackOptional + @Optional public Float f4; - @MessagePackOptional + @Optional public Double f5; - @MessagePackOptional + @Optional public Boolean f6; - @MessagePackOptional + @Optional public BigInteger f7; - @MessagePackOptional + @Optional public String f8; - @MessagePackOptional + @Optional public byte[] f9; - @MessagePackOptional + @Optional public ByteBuffer f10; public OptionalGeneralReferenceTypeFieldsClass() { @@ -640,17 +640,17 @@ public class TestPackConvert extends TestCase { } public static class SampleOptionalListTypes { - @MessagePackOptional + @Optional public List f0; - @MessagePackOptional + @Optional public List f1; - @MessagePackOptional + @Optional public List f2; - @MessagePackOptional + @Optional public List> f3; - @MessagePackOptional + @Optional public List f4; - @MessagePackOptional + @Optional public List f5; public SampleOptionalListTypes() { @@ -659,9 +659,9 @@ public class TestPackConvert extends TestCase { @MessagePackMessage public static class SampleOptionalListNestedType { - @MessagePackOptional + @Optional public byte[] f0; - @MessagePackOptional + @Optional public String f1; public SampleOptionalListNestedType() { @@ -828,11 +828,11 @@ public class TestPackConvert extends TestCase { } public static class SampleOptionalMapTypes { - @MessagePackOptional + @Optional public Map f0; - @MessagePackOptional + @Optional public Map f1; - @MessagePackOptional + @Optional public Map f2; public SampleOptionalMapTypes() { @@ -1176,9 +1176,9 @@ public class TestPackConvert extends TestCase { } public static class SampleOptionalEnumFieldClass { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public SampleOptionalEnum f1; public SampleOptionalEnumFieldClass() { @@ -1255,9 +1255,9 @@ public class TestPackConvert extends TestCase { } public static class OptionalFieldModifiersClass { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public final int f1 = 1; private int f2; protected int f3; @@ -1396,9 +1396,9 @@ public class TestPackConvert extends TestCase { } public static class OptionalBaseClass { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public OptionalNestedClass f1; public OptionalBaseClass() { @@ -1406,7 +1406,7 @@ public class TestPackConvert extends TestCase { } public static class OptionalNestedClass { - @MessagePackOptional + @Optional public int f2; public OptionalNestedClass() { @@ -1530,9 +1530,9 @@ public class TestPackConvert extends TestCase { } public static class OptionalBaseClass2 { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public OptionalMessagePackMessageClass2 f1; public OptionalBaseClass2() { @@ -1541,7 +1541,7 @@ public class TestPackConvert extends TestCase { @MessagePackMessage public static class OptionalMessagePackMessageClass2 { - @MessagePackOptional + @Optional public int f2; public OptionalMessagePackMessageClass2() { @@ -1675,7 +1675,7 @@ public class TestPackConvert extends TestCase { } public static class SampleOptionalSubClass extends SampleOptionalSuperClass { - @MessagePackOptional + @Optional public int f0; public final int f1 = 1; private int f2; @@ -1687,7 +1687,7 @@ public class TestPackConvert extends TestCase { } public static class SampleOptionalSuperClass { - @MessagePackOptional + @Optional public int f5; public final int f6 = 2; @SuppressWarnings("unused") @@ -1867,12 +1867,12 @@ public class TestPackConvert extends TestCase { } public static class OptionalBaseMessagePackableConvertableClass { - @MessagePackOptional + @Optional public OptionalMessagePackableConvertableClass f0; - @MessagePackOptional + @Optional public int f1; - @MessagePackOptional + @Optional public List f2; public OptionalBaseMessagePackableConvertableClass() { @@ -1881,9 +1881,9 @@ public class TestPackConvert extends TestCase { public static class OptionalMessagePackableConvertableClass implements MessagePackable, MessageConvertable { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public int f1; public OptionalMessagePackableConvertableClass() { diff --git a/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java b/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java index 0b5344ac..2fea0d3e 100644 --- a/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java +++ b/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java @@ -21,8 +21,8 @@ import org.msgpack.Packer; import org.msgpack.Template; import org.msgpack.Unpacker; import org.msgpack.annotation.MessagePackMessage; -import org.msgpack.annotation.MessagePackOptional; import org.msgpack.annotation.MessagePackOrdinalEnum; +import org.msgpack.annotation.Optional; import org.msgpack.packer.OptionalPacker; import org.msgpack.template.NullableTemplate; @@ -170,19 +170,19 @@ public class TestPackUnpack extends TestCase { } public static class OptionalPrimitiveTypeFieldsClass { - @MessagePackOptional + @Optional public byte f0; - @MessagePackOptional + @Optional public short f1; - @MessagePackOptional + @Optional public int f2; - @MessagePackOptional + @Optional public long f3; - @MessagePackOptional + @Optional public float f4; - @MessagePackOptional + @Optional public double f5; - @MessagePackOptional + @Optional public boolean f6; public OptionalPrimitiveTypeFieldsClass() { @@ -350,27 +350,27 @@ public class TestPackUnpack extends TestCase { } public static class GeneralOptionalReferenceTypeFieldsClass { - @MessagePackOptional + @Optional public Byte f0; - @MessagePackOptional + @Optional public Short f1; - @MessagePackOptional + @Optional public Integer f2; - @MessagePackOptional + @Optional public Long f3; - @MessagePackOptional + @Optional public Float f4; - @MessagePackOptional + @Optional public Double f5; - @MessagePackOptional + @Optional public Boolean f6; - @MessagePackOptional + @Optional public BigInteger f7; - @MessagePackOptional + @Optional public String f8; - @MessagePackOptional + @Optional public byte[] f9; - @MessagePackOptional + @Optional public ByteBuffer f10; public GeneralOptionalReferenceTypeFieldsClass() { @@ -580,17 +580,17 @@ public class TestPackUnpack extends TestCase { } public static class SampleOptionalListTypes { - @MessagePackOptional + @Optional public List f0; - @MessagePackOptional + @Optional public List f1; - @MessagePackOptional + @Optional public List f2; - @MessagePackOptional + @Optional public List> f3; - @MessagePackOptional + @Optional public List f4; - @MessagePackOptional + @Optional public List f5; public SampleOptionalListTypes() { @@ -599,9 +599,9 @@ public class TestPackUnpack extends TestCase { @MessagePackMessage public static class SampleOptionalListNestedType { - @MessagePackOptional + @Optional public byte[] f0; - @MessagePackOptional + @Optional public String f1; public SampleOptionalListNestedType() { @@ -746,11 +746,11 @@ public class TestPackUnpack extends TestCase { } public static class SampleOptionalMapTypes { - @MessagePackOptional + @Optional public Map f0; - @MessagePackOptional + @Optional public Map f1; - @MessagePackOptional + @Optional public Map f2; public SampleOptionalMapTypes() { @@ -1065,10 +1065,10 @@ public class TestPackUnpack extends TestCase { } public static class SampleOptionalEnumFieldClass { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public SampleOptionalEnum f1; public SampleOptionalEnumFieldClass() { @@ -1136,9 +1136,9 @@ public class TestPackUnpack extends TestCase { } public static class OptionalFieldModifiersClass { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public final int f1 = 1; private int f2; protected int f3; @@ -1245,9 +1245,9 @@ public class TestPackUnpack extends TestCase { } public static class OptionalBaseClass { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public OptionalNestedClass f1; public OptionalBaseClass() { @@ -1255,7 +1255,7 @@ public class TestPackUnpack extends TestCase { } public static class OptionalNestedClass { - @MessagePackOptional + @Optional public int f2; public OptionalNestedClass() { @@ -1355,9 +1355,9 @@ public class TestPackUnpack extends TestCase { } public static class OptionalBaseClass2 { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public OptionalMessagePackMessageClass2 f1; public OptionalBaseClass2() { @@ -1366,7 +1366,7 @@ public class TestPackUnpack extends TestCase { @MessagePackMessage public static class OptionalMessagePackMessageClass2 { - @MessagePackOptional + @Optional public int f2; public OptionalMessagePackMessageClass2() { @@ -1482,7 +1482,7 @@ public class TestPackUnpack extends TestCase { } public static class SampleOptionalSubClass extends SampleOptionalSuperClass { - @MessagePackOptional + @Optional public int f0; public final int f1 = 1; private int f2; @@ -1494,7 +1494,7 @@ public class TestPackUnpack extends TestCase { } public static class SampleOptionalSuperClass { - @MessagePackOptional + @Optional public int f5; public final int f6 = 2; @SuppressWarnings("unused") @@ -1649,11 +1649,11 @@ public class TestPackUnpack extends TestCase { } public static class OptionalBaseMessagePackableUnpackableClass { - @MessagePackOptional + @Optional public OptionalMessagePackableUnpackableClass f0; - @MessagePackOptional + @Optional public int f1; - @MessagePackOptional + @Optional public List f2; public OptionalBaseMessagePackableUnpackableClass() { @@ -1662,9 +1662,9 @@ public class TestPackUnpack extends TestCase { public static class OptionalMessagePackableUnpackableClass implements MessagePackable, MessageUnpackable { - @MessagePackOptional + @Optional public int f0; - @MessagePackOptional + @Optional public int f1; public OptionalMessagePackableUnpackableClass() {