Skip to content

Commit da8f1a7

Browse files
authored
IGNITE-28763 Fixed BinaryObjectBuilder enum type mapping (#13229)
1 parent 58d5a59 commit da8f1a7

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ public static byte typeByClass(Class<?> cls) {
607607
if (type != null)
608608
return type;
609609

610-
if (CommonUtils.isEnum(cls))
610+
if (CommonUtils.isEnum(cls) || cls == Enum.class)
611611
return GridBinaryMarshaller.ENUM;
612612

613613
if (cls.isArray())

modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderDefaultMappersSelfTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,34 @@ public void testMetaData2() throws Exception {
822822
assertEquals("Object", meta.fieldTypeName("objectField"));
823823
}
824824

825+
/** */
826+
@Test
827+
@SuppressWarnings({"rawtypes", "unchecked"})
828+
public void testSetBinaryEnumFieldWithEnumClass() {
829+
IgniteBinary binary = binaries();
830+
831+
binary.registerEnum(BuilderEnum.class.getName(), F.asMap(
832+
BuilderEnum.ONE.name(), BuilderEnum.ONE.ordinal(),
833+
BuilderEnum.TWO.name(), BuilderEnum.TWO.ordinal()));
834+
835+
String typeName = "org.test.EnumMetaTest";
836+
String fld = "enumField";
837+
838+
BinaryObject bo = builder(typeName)
839+
.setField(fld, binary.buildEnum(BuilderEnum.class.getName(), BuilderEnum.ONE.name()))
840+
.build();
841+
842+
assertEquals("Enum", bo.type().fieldTypeName(fld));
843+
assertEquals(BuilderEnum.ONE.ordinal(), bo.<BinaryObject>field(fld).enumOrdinal());
844+
845+
bo = builder(typeName)
846+
.setField(fld, binary.buildEnum(BuilderEnum.class.getName(), BuilderEnum.TWO.name()), (Class)Enum.class)
847+
.build();
848+
849+
assertEquals("Enum", bo.type().fieldTypeName(fld));
850+
assertEquals(BuilderEnum.TWO.ordinal(), bo.<BinaryObject>field(fld).enumOrdinal());
851+
}
852+
825853
/**
826854
* @param fullClsName Class name.
827855
* @return Expected type name according to configuration.
@@ -1077,6 +1105,15 @@ private static class CustomIdMapper {
10771105
private int i = 10;
10781106
}
10791107

1108+
/** */
1109+
private enum BuilderEnum {
1110+
/** */
1111+
ONE,
1112+
1113+
/** */
1114+
TWO
1115+
}
1116+
10801117
/**
10811118
*/
10821119
private static class Key {

0 commit comments

Comments
 (0)