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

Commit 803870e

Browse files
committed
Added more method call replacers
1 parent 670f7fa commit 803870e

5 files changed

Lines changed: 158 additions & 0 deletions

File tree

src/main/java/net/raphimc/javadowngrader/transformer/j10/Java11ToJava10.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public Java11ToJava10() {
4343
this.addMethodCallReplacer(Opcodes.INVOKEINTERFACE, "java/util/List", "toArray", "(Ljava/util/function/IntFunction;)[Ljava/lang/Object;", new ListToArrayMCR());
4444

4545
this.addMethodCallReplacer(Opcodes.INVOKESTATIC, "java/lang/Character", "toString", "(I)Ljava/lang/String;", new CharacterToStringMCR());
46+
47+
this.addMethodCallReplacer(Opcodes.INVOKEVIRTUAL, "java/util/zip/Inflater", "setInput", "(Ljava/nio/ByteBuffer;)V", new InflaterSetInputMCR());
48+
this.addMethodCallReplacer(Opcodes.INVOKEVIRTUAL, "java/util/zip/Inflater", "inflate", "(Ljava/nio/ByteBuffer;)I", new InflaterInflateMCR());
4649
}
4750

4851
@Override
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* This file is part of JavaDowngrader - https://github.com/RaphiMC/JavaDowngrader
3+
* Copyright (C) 2023 RK_01/RaphiMC and contributors
4+
*
5+
* This program is free software; you can redistribute it and/or
6+
* modify it under the terms of the GNU Lesser General Public
7+
* License as published by the Free Software Foundation; either
8+
* version 3 of the License, or (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package net.raphimc.javadowngrader.transformer.j10.methodcallreplacer;
19+
20+
import net.raphimc.javadowngrader.RuntimeDepCollector;
21+
import net.raphimc.javadowngrader.transformer.MethodCallReplacer;
22+
import org.objectweb.asm.Opcodes;
23+
import org.objectweb.asm.tree.*;
24+
25+
public class InflaterInflateMCR implements MethodCallReplacer {
26+
27+
@Override
28+
public InsnList getReplacement(ClassNode classNode, MethodNode method, String originalName, String originalDesc, RuntimeDepCollector depCollector) {
29+
final InsnList replacement = new InsnList();
30+
31+
// Inflater ByteBuffer
32+
replacement.add(new InsnNode(Opcodes.DUP));
33+
// Inflater ByteBuffer ByteBuffer
34+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/nio/ByteBuffer", "remaining", "()I"));
35+
// Inflater ByteBuffer int
36+
replacement.add(new IntInsnNode(Opcodes.NEWARRAY, Opcodes.T_BYTE));
37+
// Inflater ByteBuffer byte[]
38+
replacement.add(new InsnNode(Opcodes.DUP2_X1));
39+
// ByteBuffer byte[] Inflater ByteBuffer byte[]
40+
replacement.add(new InsnNode(Opcodes.POP2));
41+
// ByteBuffer byte[] Inflater
42+
replacement.add(new InsnNode(Opcodes.SWAP));
43+
// ByteBuffer Inflater byte[]
44+
replacement.add(new InsnNode(Opcodes.DUP_X1));
45+
// ByteBuffer byte[] Inflater byte[]
46+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/util/zip/Inflater", "inflate", "([B)I"));
47+
// ByteBuffer byte[] int
48+
replacement.add(new InsnNode(Opcodes.DUP_X2));
49+
// int ByteBuffer byte[] int
50+
replacement.add(new InsnNode(Opcodes.ICONST_0));
51+
// int ByteBuffer byte[] int int(0)
52+
replacement.add(new InsnNode(Opcodes.SWAP));
53+
// int ByteBuffer byte[] int(0) int
54+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/nio/ByteBuffer", "put", "([BII)Ljava/nio/ByteBuffer;"));
55+
// int ByteBuffer
56+
replacement.add(new InsnNode(Opcodes.POP));
57+
// int
58+
59+
return replacement;
60+
}
61+
62+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* This file is part of JavaDowngrader - https://github.com/RaphiMC/JavaDowngrader
3+
* Copyright (C) 2023 RK_01/RaphiMC and contributors
4+
*
5+
* This program is free software; you can redistribute it and/or
6+
* modify it under the terms of the GNU Lesser General Public
7+
* License as published by the Free Software Foundation; either
8+
* version 3 of the License, or (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package net.raphimc.javadowngrader.transformer.j10.methodcallreplacer;
19+
20+
import net.raphimc.javadowngrader.RuntimeDepCollector;
21+
import net.raphimc.javadowngrader.transformer.MethodCallReplacer;
22+
import org.objectweb.asm.Opcodes;
23+
import org.objectweb.asm.tree.*;
24+
25+
public class InflaterSetInputMCR implements MethodCallReplacer {
26+
27+
@Override
28+
public InsnList getReplacement(ClassNode classNode, MethodNode method, String originalName, String originalDesc, RuntimeDepCollector depCollector) {
29+
final InsnList replacement = new InsnList();
30+
31+
// Inflater ByteBuffer
32+
replacement.add(new InsnNode(Opcodes.DUP));
33+
// Inflater ByteBuffer ByteBuffer
34+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/nio/ByteBuffer", "remaining", "()I"));
35+
// Inflater ByteBuffer int
36+
replacement.add(new IntInsnNode(Opcodes.NEWARRAY, Opcodes.T_BYTE));
37+
// Inflater ByteBuffer byte[]
38+
replacement.add(new InsnNode(Opcodes.DUP_X1));
39+
// Inflater byte[] ByteBuffer byte[]
40+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/nio/ByteBuffer", "get", "([B)Ljava/nio/ByteBuffer;"));
41+
// Inflater byte[] ByteBuffer
42+
replacement.add(new InsnNode(Opcodes.POP));
43+
// Inflater byte[]
44+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/util/zip/Inflater", "setInput", "([B)V"));
45+
46+
return replacement;
47+
}
48+
49+
}

src/main/java/net/raphimc/javadowngrader/transformer/j9/Java10ToJava9.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public Java10ToJava9() {
3737
this.addMethodCallReplacer(Opcodes.INVOKESTATIC, "java/io/Reader", "transferTo", new ReaderTransferToMCR());
3838

3939
this.addMethodCallReplacer(Opcodes.INVOKEVIRTUAL, "java/util/Optional", "orElseThrow", "()Ljava/lang/Object;", new OptionalOrElseThrowMCR());
40+
41+
this.addMethodCallReplacer(Opcodes.INVOKESTATIC, "java/net/URLEncoder", "encode", "(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;", new URLEncoderEncodeMCR());
4042
}
4143

4244
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* This file is part of JavaDowngrader - https://github.com/RaphiMC/JavaDowngrader
3+
* Copyright (C) 2023 RK_01/RaphiMC and contributors
4+
*
5+
* This program is free software; you can redistribute it and/or
6+
* modify it under the terms of the GNU Lesser General Public
7+
* License as published by the Free Software Foundation; either
8+
* version 3 of the License, or (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package net.raphimc.javadowngrader.transformer.j9.methodcallreplacer;
19+
20+
import net.raphimc.javadowngrader.RuntimeDepCollector;
21+
import net.raphimc.javadowngrader.transformer.MethodCallReplacer;
22+
import org.objectweb.asm.Opcodes;
23+
import org.objectweb.asm.tree.ClassNode;
24+
import org.objectweb.asm.tree.InsnList;
25+
import org.objectweb.asm.tree.MethodInsnNode;
26+
import org.objectweb.asm.tree.MethodNode;
27+
28+
public class URLEncoderEncodeMCR implements MethodCallReplacer {
29+
30+
@Override
31+
public InsnList getReplacement(ClassNode classNode, MethodNode methodNode, String originalName, String originalDesc, RuntimeDepCollector depCollector) {
32+
final InsnList replacement = new InsnList();
33+
34+
// String Charset
35+
replacement.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/nio/charset/Charset", "name", "()Ljava/lang/String;"));
36+
// String String
37+
replacement.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "java/net/URLEncoder", "encode", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"));
38+
39+
return replacement;
40+
}
41+
42+
}

0 commit comments

Comments
 (0)