Skip to content
This repository was archived by the owner on May 12, 2024. It is now read-only.

Commit e47c9ef

Browse files
committed
Collections.empty*, Collections.singleton*
1 parent 77542d1 commit e47c9ef

3 files changed

Lines changed: 57 additions & 3 deletions

File tree

src/main/java/net/raphimc/javadowngrader/transformer/j8/methodcallreplacer/ListOfMCR.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,27 @@ public InsnList getReplacement(ClassNode classNode, MethodNode methodNode, Strin
3131

3232
final Type[] args = Type.getArgumentTypes(originalDesc);
3333
if (args.length != 1 || args[0].getSort() != Type.ARRAY) {
34+
final int argCount = args.length;
35+
if (argCount == 0) {
36+
replacement.add(new MethodInsnNode(
37+
Opcodes.INVOKESTATIC,
38+
"java/util/Collections",
39+
"emptyList",
40+
"()Ljava/util/List;"
41+
));
42+
return replacement;
43+
} else if (argCount == 1) {
44+
replacement.add(new MethodInsnNode(
45+
Opcodes.INVOKESTATIC,
46+
"java/util/Collections",
47+
"singletonList",
48+
"(Ljava/lang/Object;)Ljava/util/Set;"
49+
));
50+
return replacement;
51+
}
52+
3453
final int freeVarIndex = ASMUtil.getFreeVarIndex(methodNode);
3554

36-
final int argCount = args.length;
3755
replacement.add(new TypeInsnNode(Opcodes.NEW, "java/util/ArrayList"));
3856
replacement.add(new InsnNode(Opcodes.DUP));
3957
replacement.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V"));

src/main/java/net/raphimc/javadowngrader/transformer/j8/methodcallreplacer/MapOfMCR.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,31 @@ public InsnList getReplacement(ClassNode classNode, MethodNode methodNode, Strin
3030
final InsnList replacement = new InsnList();
3131

3232
final Type[] args = Type.getArgumentTypes(originalDesc);
33-
final int freeVarIndex = ASMUtil.getFreeVarIndex(methodNode);
3433

3534
final int argCount = args.length;
3635
if (argCount % 2 != 0) {
3736
throw new RuntimeException("Map.of() requires an even number of arguments");
3837
}
3938

39+
if (argCount == 0) {
40+
replacement.add(new MethodInsnNode(
41+
Opcodes.INVOKESTATIC,
42+
"java/util/Collections",
43+
"emptyMap",
44+
"()Ljava/util/Map;"
45+
));
46+
return replacement;
47+
} else if (argCount == 2) {
48+
replacement.add(new MethodInsnNode(
49+
Opcodes.INVOKESTATIC,
50+
"java/util/Collections",
51+
"singletonMap",
52+
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;"
53+
));
54+
return replacement;
55+
}
56+
final int freeVarIndex = ASMUtil.getFreeVarIndex(methodNode);
57+
4058
replacement.add(new TypeInsnNode(Opcodes.NEW, "java/util/HashMap"));
4159
replacement.add(new InsnNode(Opcodes.DUP));
4260
replacement.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "java/util/HashMap", "<init>", "()V"));

src/main/java/net/raphimc/javadowngrader/transformer/j8/methodcallreplacer/SetOfMCR.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,27 @@ public InsnList getReplacement(ClassNode classNode, MethodNode methodNode, Strin
3131

3232
final Type[] args = Type.getArgumentTypes(originalDesc);
3333
if (args.length != 1 || args[0].getSort() != Type.ARRAY) {
34+
final int argCount = args.length;
35+
if (argCount == 0) {
36+
replacement.add(new MethodInsnNode(
37+
Opcodes.INVOKESTATIC,
38+
"java/util/Collections",
39+
"emptySet",
40+
"()Ljava/util/Set;"
41+
));
42+
return replacement;
43+
} else if (argCount == 1) {
44+
replacement.add(new MethodInsnNode(
45+
Opcodes.INVOKESTATIC,
46+
"java/util/Collections",
47+
"singleton",
48+
"(Ljava/lang/Object;)Ljava/util/Set;"
49+
));
50+
return replacement;
51+
}
52+
3453
final int freeVarIndex = ASMUtil.getFreeVarIndex(methodNode);
3554

36-
final int argCount = args.length;
3755
replacement.add(new TypeInsnNode(Opcodes.NEW, "java/util/HashSet"));
3856
replacement.add(new InsnNode(Opcodes.DUP));
3957
replacement.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "java/util/HashSet", "<init>", "()V"));

0 commit comments

Comments
 (0)