fix[enhance]: 字节码增强的泛型擦除不受影响

This commit is contained in:
godotg
2022-09-25 17:00:22 +08:00
parent fae47396b2
commit a11a24b7c2
4 changed files with 3 additions and 17 deletions
@@ -98,20 +98,6 @@ public abstract class CollectionUtils {
return size <= 0 ? new HashMap<>() : new HashMap<>(comfortableCapacity(size));
}
// 字节码增强的类型转换必须要泛型擦除,erasureListerasureSeterasureMap会在字节码增强的代码中调用
public static List<?> erasureList(int size) {
return newList(size);
}
public static Set<?> erasureSet(int size) {
return newSet(size);
}
public static Map<?, ?> erasureMap(int size) {
return newMap(size);
}
/**
* 数组初始化长度的安全上限限制,防止反序列化异常导致内存突然升高
*/
@@ -67,7 +67,7 @@ public class EnhanceListSerializer implements IEnhanceSerializer {
var size = "size" + GenerateProtocolFile.index.getAndIncrement();
builder.append(StringUtils.format("int {}={}.readInt($1);", size, EnhanceUtils.byteBufUtils));
builder.append(StringUtils.format("List {} = CollectionUtils.erasureList({});", list, size));
builder.append(StringUtils.format("List {} = CollectionUtils.newList({});", list, size));
var i = "i" + GenerateProtocolFile.index.getAndIncrement();
@@ -80,7 +80,7 @@ public class EnhanceMapSerializer implements IEnhanceSerializer {
var size = "size" + GenerateProtocolFile.index.getAndIncrement();
builder.append(StringUtils.format("int {}={}.readInt($1);", size, EnhanceUtils.byteBufUtils));
builder.append(StringUtils.format("Map {} = CollectionUtils.erasureMap({});", map, size));
builder.append(StringUtils.format("Map {} = CollectionUtils.newMap({});", map, size));
var i = "i" + GenerateProtocolFile.index.getAndIncrement();
builder.append(StringUtils.format("for(int {}=0; {}<{}; {}++){", i, i, size, i));
@@ -65,7 +65,7 @@ public class EnhanceSetSerializer implements IEnhanceSerializer {
var size = "size" + GenerateProtocolFile.index.getAndIncrement();
builder.append(StringUtils.format("int {} = {}.readInt($1);", size, EnhanceUtils.byteBufUtils));
builder.append(StringUtils.format("Set {} = CollectionUtils.erasureSet({});", set, size));
builder.append(StringUtils.format("Set {} = CollectionUtils.newSet({});", set, size));
var i = "i" + GenerateProtocolFile.index.getAndIncrement();
builder.append(StringUtils.format("for(int {}=0; {}<{}; {}++){", i, i, size, i));