Skip to content

Commit 77a63f1

Browse files
IGNITE-26728 Reuse instance of DefaultEnumMapper for enums w/o CustomMapper
1 parent 8681db6 commit 77a63f1

File tree

4 files changed

+27
-58
lines changed

4 files changed

+27
-58
lines changed

modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class MessageSerializerGenerator {
9393
private final Set<String> imports = new TreeSet<>();
9494

9595
/** Collection of Serializer class fields containing mappers for message enum fields. */
96-
private final Set<String> mapperFields = new TreeSet<>();
96+
private final Set<String> fields = new TreeSet<>();
9797

9898
/** */
9999
private final ProcessingEnvironment env;
@@ -336,7 +336,7 @@ private void returnFalseIfWriteFailed(VariableElement field) throws Exception {
336336

337337
imports.add("org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType");
338338

339-
returnFalseIfEnumWriteFailed(write, "writer.writeObjectArray", getExpr,
339+
returnFalseIfWriteFailed(write, "writer.writeObjectArray", getExpr,
340340
"MessageCollectionItemType." + messageCollectionItemType(componentType));
341341

342342
return;
@@ -389,13 +389,12 @@ else if (assignableFrom(erasedType(type), type(Collection.class.getName()))) {
389389

390390
imports.add("org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType");
391391

392-
returnFalseIfEnumWriteFailed(write, "writer.writeCollection", getExpr,
392+
returnFalseIfWriteFailed(write, "writer.writeCollection", getExpr,
393393
"MessageCollectionItemType." + messageCollectionItemType(typeArgs.get(0)));
394394
}
395395

396396
else if (enumType(type)) {
397397
//TODO check CustomMapper annotation
398-
imports.add("org.apache.ignite.plugin.extensions.communication.mappers.EnumMapper");
399398
imports.add("org.apache.ignite.plugin.extensions.communication.mappers.DefaultEnumMapper");
400399

401400
Element element = env.getTypeUtils().asElement(type);
@@ -407,11 +406,11 @@ else if (enumType(type)) {
407406
char[] chars = enumName.toCharArray();
408407
chars[0] = Character.toLowerCase(chars[0]);
409408

410-
String enumMapperSerializerFieldName = new String(chars) + "Mapper";
409+
String enumValuesFieldName = new String(chars) + "Vals";
411410

412-
mapperFields.add("private final EnumMapper<" + enumName + "> " + enumMapperSerializerFieldName + " = new DefaultEnumMapper<>(" + enumName + ".values());");
411+
fields.add("private final " + enumName + "[] " + enumValuesFieldName + " = " + enumName + ".values();");
413412

414-
returnFalseIfEnumWriteFailed(write, "writer.writeByte", enumMapperSerializerFieldName + ".encode", getExpr);
413+
returnFalseIfEnumWriteFailed(write, "writer.writeByte", "DefaultEnumMapper.INSTANCE.encode", getExpr);
415414
}
416415

417416
else
@@ -576,9 +575,9 @@ else if (enumType(type)) {
576575
char[] chars = enumName.toCharArray();
577576
chars[0] = Character.toLowerCase(chars[0]);
578577

579-
String enumMapperSerializerFieldName = new String(chars) + "Mapper";
578+
String enumValuesFieldName = new String(chars) + "Vals";
580579

581-
returnFalseIfEnumReadFailed(name, enumMapperSerializerFieldName + ".decode");
580+
returnFalseIfEnumReadFailed(name, "DefaultEnumMapper.INSTANCE.decode", enumValuesFieldName);
582581
}
583582

584583
else
@@ -706,8 +705,8 @@ private void returnFalseIfReadFailed(String var, String mtd, String... args) {
706705
* @param msgSetterName Variable name.
707706
* @param mapperDecodeCall Method name.
708707
*/
709-
private void returnFalseIfEnumReadFailed(String msgSetterName, String mapperDecodeCall) {
710-
read.add(line("msg.%s(%s(reader.readByte()));", msgSetterName, mapperDecodeCall));
708+
private void returnFalseIfEnumReadFailed(String msgSetterName, String mapperDecodeCall, String enumValuesFieldName) {
709+
read.add(line("msg.%s(%s(%s, reader.readByte()));", msgSetterName, mapperDecodeCall, enumValuesFieldName));
711710

712711
read.add(EMPTY);
713712

@@ -753,7 +752,7 @@ private String line(String format, Object... args) {
753752
private void writeClassFields(Writer writer) throws IOException {
754753
indent = 1;
755754

756-
for (String field: mapperFields) {
755+
for (String field: fields) {
757756
writer.write(line(METHOD_JAVADOC));
758757
writer.write(NL);
759758
writer.write(line(field));
@@ -785,8 +784,8 @@ private void writeClassHeader(Writer writer, String pkgName, String serClsName)
785784
imports.add("org.apache.ignite.plugin.extensions.communication.MessageWriter");
786785
imports.add("org.apache.ignite.plugin.extensions.communication.MessageReader");
787786

788-
for (String i: imports)
789-
writer.write("import " + i + ";" + NL);
787+
for (String regularImport: imports)
788+
writer.write("import " + regularImport + ";" + NL);
790789

791790
writer.write(NL);
792791
writer.write(CLS_JAVADOC);

modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/mappers/DefaultEnumMapper.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,20 @@
1818
package org.apache.ignite.plugin.extensions.communication.mappers;
1919

2020
/** */
21-
public class DefaultEnumMapper<T extends Enum<T>> implements EnumMapper<T> {
21+
public class DefaultEnumMapper {
2222
/** */
23-
private final T[] enumVals;
23+
public static final DefaultEnumMapper INSTANCE = new DefaultEnumMapper();
2424

2525
/** */
26-
public DefaultEnumMapper(T[] vals) {
27-
enumVals = vals;
28-
}
26+
private DefaultEnumMapper() {}
2927

30-
/** {@inheritDoc} */
31-
@Override public byte encode(T enumVal) {
28+
/** */
29+
public <T extends Enum<T>> byte encode(T enumVal) {
3230
return (byte)enumVal.ordinal();
3331
}
3432

35-
/** {@inheritDoc} */
36-
@Override public T decode(byte enumCode) {
37-
return enumVals[enumCode];
33+
/** */
34+
public <T extends Enum<T>> T decode(T[] vals, byte enumCode) {
35+
return vals[enumCode];
3836
}
3937
}

modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/mappers/EnumMapper.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

modules/core/src/test/resources/codegen/EnumFieldsMessageSerializer.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
2525
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
2626
import org.apache.ignite.plugin.extensions.communication.mappers.DefaultEnumMapper;
27-
import org.apache.ignite.plugin.extensions.communication.mappers.EnumMapper;
2827
import org.apache.ignite.transactions.TransactionIsolation;
2928

3029
/**
@@ -34,9 +33,9 @@
3433
*/
3534
public class EnumFieldsMessageSerializer implements MessageSerializer {
3635
/** */
37-
private final EnumMapper<GridCacheOperation> gridCacheOperationMapper = new DefaultEnumMapper<>(GridCacheOperation.values());
36+
private final GridCacheOperation[] gridCacheOperationVals = GridCacheOperation.values();
3837
/** */
39-
private final EnumMapper<TransactionIsolation> transactionIsolationMapper = new DefaultEnumMapper<>(TransactionIsolation.values());
38+
private final TransactionIsolation[] transactionIsolationVals = TransactionIsolation.values();
4039

4140
/** */
4241
@Override public boolean writeTo(Message m, MessageWriter writer) {
@@ -51,13 +50,13 @@ public class EnumFieldsMessageSerializer implements MessageSerializer {
5150

5251
switch (writer.state()) {
5352
case 0:
54-
if (!writer.writeByte(transactionIsolationMapper.encode(msg.publicEnum())))
53+
if (!writer.writeByte(DefaultEnumMapper.INSTANCE.encode(msg.publicEnum())))
5554
return false;
5655

5756
writer.incrementState();
5857

5958
case 1:
60-
if (!writer.writeByte(gridCacheOperationMapper.encode(msg.internalEnum())))
59+
if (!writer.writeByte(DefaultEnumMapper.INSTANCE.encode(msg.internalEnum())))
6160
return false;
6261

6362
writer.incrementState();
@@ -72,15 +71,15 @@ public class EnumFieldsMessageSerializer implements MessageSerializer {
7271

7372
switch (reader.state()) {
7473
case 0:
75-
msg.publicEnum(transactionIsolationMapper.decode(reader.readByte()));
74+
msg.publicEnum(DefaultEnumMapper.INSTANCE.decode(transactionIsolationVals, reader.readByte()));
7675

7776
if (!reader.isLastRead())
7877
return false;
7978

8079
reader.incrementState();
8180

8281
case 1:
83-
msg.internalEnum(gridCacheOperationMapper.decode(reader.readByte()));
82+
msg.internalEnum(DefaultEnumMapper.INSTANCE.decode(gridCacheOperationVals, reader.readByte()));
8483

8584
if (!reader.isLastRead())
8685
return false;

0 commit comments

Comments
 (0)