feat(script): add options support

This commit is contained in:
Skylot
2022-07-21 20:39:05 +01:00
parent d9af91bc4d
commit 278d7fa3f9
10 changed files with 237 additions and 28 deletions
@@ -1,19 +1,26 @@
package jadx.plugins.script
import jadx.api.plugins.JadxPlugin
import jadx.api.plugins.JadxPluginContext
import jadx.api.plugins.JadxPluginInfo
import jadx.api.plugins.gui.JadxGuiContext
import jadx.api.plugins.pass.JadxPassContext
import jadx.api.plugins.options.JadxPluginOptions
import jadx.api.plugins.options.OptionDescription
import jadx.plugins.script.passes.JadxScriptAfterLoadPass
import jadx.plugins.script.runner.ScriptEval
import jadx.plugins.script.runtime.data.JadxScriptAllOptions
class JadxScriptPlugin : JadxPlugin {
class JadxScriptPlugin : JadxPluginOptions {
var scriptOptions: JadxScriptAllOptions = JadxScriptAllOptions(emptyMap())
override fun getPluginInfo() = JadxPluginInfo("jadx-script", "Jadx Script", "Scripting support for jadx")
override fun setOptions(options: Map<String, String>) {
scriptOptions = JadxScriptAllOptions(options)
}
override fun init(init: JadxPluginContext) {
val scriptStates = ScriptEval().process(init) ?: return
val scriptStates = ScriptEval().process(init, scriptOptions) ?: return
init.passContext.addPass(JadxScriptAfterLoadPass(scriptStates))
}
override fun getOptionsDescriptions(): List<OptionDescription> = scriptOptions.descriptions
}
@@ -4,6 +4,7 @@ import jadx.api.JadxDecompiler
import jadx.api.plugins.JadxPluginContext
import jadx.plugins.script.runtime.JadxScript
import jadx.plugins.script.runtime.JadxScriptData
import jadx.plugins.script.runtime.data.JadxScriptAllOptions
import mu.KotlinLogging
import java.io.File
import kotlin.script.experimental.api.*
@@ -16,7 +17,7 @@ private val LOG = KotlinLogging.logger {}
class ScriptEval {
fun process(init: JadxPluginContext): ScriptStates? {
fun process(init: JadxPluginContext, scriptOptions: JadxScriptAllOptions): ScriptStates? {
val jadx = init.decompiler as JadxDecompiler
val scripts = jadx.args.inputFiles.filter { f -> f.name.endsWith(".jadx.kts") }
if (scripts.isEmpty()) {
@@ -24,7 +25,7 @@ class ScriptEval {
}
val scriptStates = ScriptStates()
for (scriptFile in scripts) {
val scriptData = JadxScriptData(jadx, init, scriptFile)
val scriptData = JadxScriptData(jadx, init, scriptOptions, scriptFile)
load(scriptFile, scriptData)
scriptStates.add(scriptFile, scriptData)
}