Convert Decompiler to Kotlin

pull/48/head
Graham 4 years ago
parent c633725c55
commit d6fc7b337b
  1. 76
      decompiler/src/main/java/dev/openrs2/decompiler/Decompiler.java
  2. 61
      decompiler/src/main/java/dev/openrs2/decompiler/Decompiler.kt

@ -1,76 +0,0 @@
package dev.openrs2.decompiler;
import java.io.Closeable;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import kotlin.jvm.functions.Function1;
import org.jetbrains.java.decompiler.main.Fernflower;
import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences;
public final class Decompiler implements Closeable {
private static final ImmutableMap<String, Object> OPTIONS = ImmutableMap.of(
IFernflowerPreferences.ASCII_STRING_CHARACTERS, "1",
IFernflowerPreferences.INDENT_STRING, "\t",
IFernflowerPreferences.SYNTHETIC_NOT_SET, "1"
);
private static Path getDestination(String archive) {
archive = archive.replaceAll("(?:_gl)?[.]jar$", "");
switch (archive) {
case "runescape":
archive = "client";
break;
case "jaggl":
archive = "gl";
break;
case "jaggl_dri":
archive = "gl-dri";
break;
}
return Paths.get("nonfree").resolve(archive).resolve("src/main/java");
}
public static void main(String[] args) throws IOException {
var deobOutput = Paths.get("nonfree/code/deob");
var sources = ImmutableList.of(
deobOutput.resolve("runescape_gl.jar"),
deobOutput.resolve("jaggl.jar"),
deobOutput.resolve("jaggl_dri.jar"),
deobOutput.resolve("loader_gl.jar"),
deobOutput.resolve("signlink_gl.jar"),
deobOutput.resolve("unpack_gl.jar"),
deobOutput.resolve("unpacker_gl.jar")
);
try (var decompiler = new Decompiler(sources, Decompiler::getDestination)) {
decompiler.run();
}
}
private final DecompilerIo io;
private final Fernflower fernflower;
private final ImmutableList<Path> sources;
public Decompiler(ImmutableList<Path> sources, Function1<String, Path> destination) {
this.io = new DecompilerIo(destination);
this.fernflower = new Fernflower(io, io, OPTIONS, Slf4jFernflowerLogger.INSTANCE);
this.sources = sources;
}
public void run() {
for (var source : sources) {
fernflower.addSource(source.toFile());
}
fernflower.decompileContext();
}
@Override
public void close() throws IOException {
io.close();
}
}

@ -0,0 +1,61 @@
package dev.openrs2.decompiler
import org.jetbrains.java.decompiler.main.Fernflower
import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences
import java.io.Closeable
import java.nio.file.Path
import java.nio.file.Paths
class Decompiler(
private val sources: List<Path>,
destination: (String) -> Path
) : Closeable {
private val io = DecompilerIo(destination)
private val fernflower = Fernflower(io, io, OPTIONS, Slf4jFernflowerLogger)
fun run() {
for (source in sources) {
fernflower.addSource(source.toFile())
}
fernflower.decompileContext()
}
override fun close() {
io.close()
}
companion object {
private val OPTIONS = mapOf(
IFernflowerPreferences.ASCII_STRING_CHARACTERS to "1",
IFernflowerPreferences.INDENT_STRING to "\t",
IFernflowerPreferences.SYNTHETIC_NOT_SET to "1"
)
private fun getDestination(archive: String): Path {
var dir = archive.replace(Regex("(?:_gl)?[.]jar$"), "")
when (dir) {
"runescape" -> dir = "client"
"jaggl" -> dir = "gl"
"jaggl_dri" -> dir = "gl-dri"
}
return Paths.get("nonfree").resolve(dir).resolve("src/main/java")
}
@JvmStatic
fun main(args: Array<String>) {
val deobOutput = Paths.get("nonfree/code/deob")
val sources = listOf(
deobOutput.resolve("runescape_gl.jar"),
deobOutput.resolve("jaggl.jar"),
deobOutput.resolve("jaggl_dri.jar"),
deobOutput.resolve("loader_gl.jar"),
deobOutput.resolve("signlink_gl.jar"),
deobOutput.resolve("unpack_gl.jar"),
deobOutput.resolve("unpacker_gl.jar")
)
Decompiler(sources, this::getDestination).use {
it.run()
}
}
}
}
Loading…
Cancel
Save