Projects STRLCPY jadx Commits 8fb07290
🤬
  • fix: scripts runtime code and docs clean up

  • Loading...
  • Skylot committed 1 year ago
    8fb07290
    1 parent 8eae8e79
  • ■ ■ ■ ■ ■ ■
    jadx-gui/build.gradle
    skipped 6 lines
    7 7   
    8 8  dependencies {
    9 9   implementation(project(':jadx-core'))
    10  - implementation(project(":jadx-cli"))
     10 + implementation(project(':jadx-cli'))
    11 11   
    12 12   // import mappings
    13 13   implementation project(':jadx-plugins:jadx-rename-mappings')
    14 14   
    15 15   // jadx-script autocomplete support
    16  - implementation(project(":jadx-plugins::jadx-script:jadx-script-ide"))
    17  - implementation(project(":jadx-plugins::jadx-script:jadx-script-runtime"))
     16 + implementation(project(':jadx-plugins:jadx-script:jadx-script-ide'))
     17 + implementation(project(':jadx-plugins:jadx-script:jadx-script-runtime'))
    18 18   implementation 'org.jetbrains.kotlin:kotlin-scripting-common:1.7.21'
    19 19   implementation 'com.fifesoft:autocomplete:3.3.0'
    20 20   
    skipped 139 lines
  • ■ ■ ■ ■
    jadx-gui/src/main/java/jadx/gui/logs/LogAppender.java
    skipped 5 lines
    6 6  import jadx.core.utils.exceptions.JadxRuntimeException;
    7 7  import jadx.gui.utils.UiUtils;
    8 8   
    9  -import static jadx.plugins.script.runtime.JadxScriptTemplateKt.JADX_SCRIPT_LOG_PREFIX;
     9 +import static jadx.plugins.script.runtime.ScriptRuntime.JADX_SCRIPT_LOG_PREFIX;
    10 10   
    11 11  class LogAppender implements ILogListener {
    12 12   private final LogOptions options;
    skipped 40 lines
  • ■ ■ ■ ■
    jadx-gui/src/main/java/jadx/gui/logs/LogOptions.java
    skipped 5 lines
    6 6   
    7 7  import jadx.core.utils.Utils;
    8 8   
    9  -import static jadx.plugins.script.runtime.JadxScriptTemplateKt.JADX_SCRIPT_LOG_PREFIX;
     9 +import static jadx.plugins.script.runtime.ScriptRuntime.JADX_SCRIPT_LOG_PREFIX;
    10 10   
    11 11  public class LogOptions {
    12 12   
    skipped 61 lines
  • ■ ■ ■ ■ ■ ■
    jadx-gui/src/main/java/jadx/gui/plugins/script/ScriptCompleteProvider.java
    skipped 26 lines
    27 27  import jadx.core.utils.exceptions.JadxRuntimeException;
    28 28  import jadx.gui.ui.codearea.AbstractCodeArea;
    29 29  import jadx.gui.utils.Icons;
    30  -import jadx.plugins.script.ide.ScriptCompiler;
    31 30  import jadx.plugins.script.ide.ScriptCompletionResult;
     31 +import jadx.plugins.script.ide.ScriptServices;
    32 32   
    33  -import static jadx.plugins.script.ide.ScriptCompilerKt.AUTO_COMPLETE_INSERT_STR;
     33 +import static jadx.plugins.script.ide.ScriptServicesKt.AUTO_COMPLETE_INSERT_STR;
    34 34   
    35 35  public class ScriptCompleteProvider extends CompletionProviderBase {
    36 36   private static final Logger LOG = LoggerFactory.getLogger(ScriptCompleteProvider.class);
    skipped 12 lines
    49 49   }
    50 50   
    51 51   private final AbstractCodeArea codeArea;
    52  - private ScriptCompiler scriptComplete;
     52 + private ScriptServices scriptComplete;
    53 53   
    54 54   public ScriptCompleteProvider(AbstractCodeArea codeArea) {
    55 55   this.codeArea = codeArea;
    56  - // this.scriptComplete = new ScriptCompiler(codeArea.getNode().getName());
    57 56   }
    58 57   
    59 58   private List<Completion> getCompletions() {
    skipped 1 lines
    61 60   String code = codeArea.getText();
    62 61   int caretPos = codeArea.getCaretPosition();
    63 62   // TODO: resolve error after reusing ScriptCompiler
    64  - scriptComplete = new ScriptCompiler(codeArea.getNode().getName());
     63 + scriptComplete = new ScriptServices(codeArea.getNode().getName());
    65 64   ScriptCompletionResult result = scriptComplete.complete(code, caretPos);
    66 65   int replacePos = getReplacePos(caretPos, result);
    67 66   if (!result.getReports().isEmpty()) {
    skipped 91 lines
  • ■ ■ ■ ■ ■ ■
    jadx-gui/src/main/java/jadx/gui/plugins/script/ScriptContentPanel.java
    skipped 39 lines
    40 40  import jadx.gui.utils.ui.ActionHandler;
    41 41  import jadx.gui.utils.ui.NodeLabel;
    42 42  import jadx.plugins.script.ide.ScriptAnalyzeResult;
    43  -import jadx.plugins.script.ide.ScriptCompiler;
     43 +import jadx.plugins.script.ide.ScriptServices;
    44 44   
    45  -import static jadx.plugins.script.runtime.JadxScriptTemplateKt.JADX_SCRIPT_LOG_PREFIX;
     45 +import static jadx.plugins.script.runtime.ScriptRuntime.JADX_SCRIPT_LOG_PREFIX;
    46 46   
    47 47  public class ScriptContentPanel extends AbstractCodeContentPanel {
    48 48   private static final long serialVersionUID = 6575696321112417513L;
    skipped 105 lines
    154 154   String code = scriptArea.getText();
    155 155   String fileName = scriptArea.getNode().getName();
    156 156   
    157  - ScriptCompiler scriptCompiler = new ScriptCompiler(fileName);
    158  - ScriptAnalyzeResult result = scriptCompiler.analyze(code, scriptArea.getCaretPosition());
     157 + ScriptServices scriptServices = new ScriptServices(fileName);
     158 + ScriptAnalyzeResult result = scriptServices.analyze(code, scriptArea.getCaretPosition());
    159 159   List<ScriptDiagnostic> issues = result.getIssues();
    160 160   boolean success = true;
    161 161   for (ScriptDiagnostic issue : issues) {
    skipped 87 lines
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/README.md
    1 1  ## JADX scripting support
    2 2   
    3  -NOTE: work still in progress!
     3 +:exclamation: Work still in progress! Script API is not stable!
    4 4   
    5 5  ### Examples
    6 6   
    7  -Check script examples in [`examples/scripts/`](https://github.com/skylot/jadx/tree/master/jadx-plugins/jadx-script/examples/scripts)
    8  -(start with [`hello`](https://github.com/skylot/jadx/blob/master/jadx-plugins/jadx-script/examples/scripts/hello.jadx.kts))
     7 +Check script examples in [`examples/scripts/`](https://github.com/skylot/jadx/tree/master/jadx-plugins/jadx-script/examples/scripts)(start with [`hello`](https://github.com/skylot/jadx/blob/master/jadx-plugins/jadx-script/examples/scripts/hello.jadx.kts))
    9 8   
    10 9  ### Script usage
    11 10   
    skipped 3 lines
    15 14   
    16 15  #### In jadx-gui
    17 16   
    18  -1. Add script file to the project
     17 +1. Add script file to the project (using `Add files` or `New script` by right-click menu on `Inputs/Scripts`)
    19 18  2. Script will appear in `Inputs/Scripts` section
    20  -3. After script change you need to reload project (`Reload` button in toolbar or `F5`)
    21  -4. You can enable `Live reload` option in `File` menu to reload project automatically on scripts change
     19 +3. After script change, you can run it using `Run` button in script editor toolbar or reload whole project (`Reload` button in toolbar or `F5`).
     20 + Also, you can enable `Live reload` option in `File` menu to reload project automatically on scripts change
    22 21   
    23 22  ### Script development
    24 23   
    25  -Jadx-gui for now don't support ~~autocompletion,~~ errors highlighting, docs and code navigation,
    26  -so best approach for script editing is to open jadx project in IntelliJ Idea and write your script in `examples/scripts/` folder.
    27  -Also, this will allow to debug your scripts: for that you need to create run configuration for jadx-cli or jadx-gui
     24 +Jadx-gui for now don't support ~~autocompletion~~, ~~errors highlighting~~, code navigation and docs,
     25 +so the best approach for script editing is to open jadx project in IntelliJ IDEA and write your script in `examples/scripts/` folder.
     26 +Also, this allows to debug your scripts: for that you need to create run configuration for jadx-cli or jadx-gui
    28 27  add breakpoints and next run it in debug mode (jadx-gui is preferred because of faster script reload).
    29 28   
    30  -Script logs and compilation errors will appear in `Log viewer` (separate script log will be added later)
     29 +Script logs and compilation errors will appear in `Log viewer` (try filter for show only script related logs)
    31 30   
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/examples/build.gradle.kts
    1 1  dependencies {
    2 2   implementation(project(":jadx-plugins:jadx-script:jadx-script-runtime"))
    3 3   
    4  - implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
    5  - implementation("org.jetbrains.kotlin:kotlin-script-runtime")
     4 + implementation(kotlin("stdlib-common"))
     5 + implementation(kotlin("script-runtime"))
    6 6   
    7 7   implementation("io.github.microutils:kotlin-logging-jvm:3.0.2")
    8 8   
    skipped 17 lines
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-ide/build.gradle.kts
    1 1  dependencies {
    2  - implementation("org.jetbrains.kotlin:kotlin-scripting-common")
    3  - implementation("org.jetbrains.kotlin:kotlin-scripting-jvm")
    4  - implementation("org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable")
    5  - implementation("org.jetbrains.kotlin:kotlin-scripting-ide-services")
    6  - 
    7 2   implementation(project(":jadx-plugins:jadx-script:jadx-script-runtime"))
    8 3   implementation(project(":jadx-plugins:jadx-script:jadx-script-plugin"))
     4 + 
     5 + implementation(kotlin("scripting-common"))
     6 + implementation(kotlin("scripting-jvm"))
     7 + implementation(kotlin("scripting-compiler-embeddable"))
     8 + implementation(kotlin("scripting-ide-services"))
    9 9   
    10 10   implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
    11 11   implementation("io.github.microutils:kotlin-logging-jvm:3.0.4")
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-ide/src/main/kotlin/ScriptCompiler.kt jadx-plugins/jadx-script/jadx-script-ide/src/main/kotlin/ScriptServices.kt
    1 1  package jadx.plugins.script.ide
    2 2   
    3  -import jadx.plugins.script.runner.ScriptEval
     3 +import jadx.plugins.script.ScriptEval
    4 4  import kotlinx.coroutines.runBlocking
    5 5  import org.jetbrains.kotlin.scripting.ide_services.compiler.KJvmReplCompilerWithIdeServices
    6 6  import kotlin.script.experimental.api.ReplAnalyzerResult
    skipped 21 lines
    28 28   val reports: List<ScriptDiagnostic>
    29 29  )
    30 30   
    31  -class ScriptCompiler(private val scriptName: String) {
     31 +class ScriptServices(private val scriptName: String) {
    32 32   private val replCompiler = KJvmReplCompilerWithIdeServices()
    33 33   private val compileConf = ScriptEval().buildCompileConf()
    34 34   
    skipped 31 lines
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-plugin/build.gradle.kts
    skipped 4 lines
    5 5  dependencies {
    6 6   implementation(project(":jadx-plugins:jadx-script:jadx-script-runtime"))
    7 7   
    8  - implementation("org.jetbrains.kotlin:kotlin-scripting-common")
    9  - implementation("org.jetbrains.kotlin:kotlin-scripting-jvm")
    10  - implementation("org.jetbrains.kotlin:kotlin-scripting-jvm-host")
    11  - 
    12  - implementation(project(":jadx-plugins:jadx-script:jadx-script-runtime"))
     8 + implementation(kotlin("scripting-common"))
     9 + implementation(kotlin("scripting-jvm"))
     10 + implementation(kotlin("scripting-jvm-host"))
    13 11   
    14 12   implementation("io.github.microutils:kotlin-logging-jvm:3.0.4")
    15 13  }
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/JadxScriptPlugin.kt
    skipped 3 lines
    4 4  import jadx.api.plugins.JadxPluginContext
    5 5  import jadx.api.plugins.JadxPluginInfo
    6 6  import jadx.plugins.script.passes.JadxScriptAfterLoadPass
    7  -import jadx.plugins.script.runner.ScriptEval
    8 7  import jadx.plugins.script.runtime.data.JadxScriptAllOptions
    9 8   
    10 9  class JadxScriptPlugin : JadxPlugin {
    skipped 3 lines
    14 13   
    15 14   override fun init(init: JadxPluginContext) {
    16 15   init.registerOptions(scriptOptions)
    17  - val scriptStates = ScriptEval().process(init, scriptOptions) ?: return
    18  - init.addPass(JadxScriptAfterLoadPass(scriptStates))
     16 + val scripts = ScriptEval().process(init, scriptOptions)
     17 + if (scripts.isNotEmpty()) {
     18 + init.addPass(JadxScriptAfterLoadPass(scripts))
     19 + }
    19 20   }
    20 21  }
    21 22   
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/ScriptEval.kt
     1 +package jadx.plugins.script
     2 + 
     3 +import jadx.api.JadxDecompiler
     4 +import jadx.api.plugins.JadxPluginContext
     5 +import jadx.plugins.script.runtime.JadxScriptData
     6 +import jadx.plugins.script.runtime.JadxScriptTemplate
     7 +import jadx.plugins.script.runtime.data.JadxScriptAllOptions
     8 +import kotlin.script.experimental.api.EvaluationResult
     9 +import kotlin.script.experimental.api.ResultValue
     10 +import kotlin.script.experimental.api.ResultWithDiagnostics
     11 +import kotlin.script.experimental.api.ScriptCompilationConfiguration
     12 +import kotlin.script.experimental.api.ScriptDiagnostic.Severity
     13 +import kotlin.script.experimental.api.ScriptEvaluationConfiguration
     14 +import kotlin.script.experimental.api.compilerOptions
     15 +import kotlin.script.experimental.api.constructorArgs
     16 +import kotlin.script.experimental.host.toScriptSource
     17 +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
     18 +import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
     19 +import kotlin.script.experimental.jvmhost.createJvmEvaluationConfigurationFromTemplate
     20 +import kotlin.system.measureTimeMillis
     21 + 
     22 +class ScriptEval {
     23 + 
     24 + private val scriptingHost = BasicJvmScriptingHost()
     25 + 
     26 + fun process(init: JadxPluginContext, scriptOptions: JadxScriptAllOptions): List<JadxScriptData> {
     27 + val jadx = init.decompiler as JadxDecompiler
     28 + val scripts = jadx.args.inputFiles.filter { f -> f.name.endsWith(".jadx.kts") }
     29 + if (scripts.isEmpty()) {
     30 + return emptyList()
     31 + }
     32 + val scriptDataList = mutableListOf<JadxScriptData>()
     33 + for (scriptFile in scripts) {
     34 + val scriptData = JadxScriptData(jadx, init, scriptOptions, scriptFile)
     35 + scriptDataList.add(scriptData)
     36 + eval(scriptData)
     37 + }
     38 + return scriptDataList
     39 + }
     40 + 
     41 + fun buildCompileConf(): ScriptCompilationConfiguration {
     42 + return createJvmCompilationConfigurationFromTemplate<JadxScriptTemplate>() {
     43 + compilerOptions(listOf("-Xuse-k2"))
     44 + }
     45 + }
     46 + 
     47 + fun buildEvalConf(scriptData: JadxScriptData): ScriptEvaluationConfiguration {
     48 + return createJvmEvaluationConfigurationFromTemplate<JadxScriptTemplate> {
     49 + constructorArgs(scriptData)
     50 + }
     51 + }
     52 + 
     53 + private fun eval(scriptData: JadxScriptData) {
     54 + scriptData.log.debug { "Loading script: ${scriptData.scriptFile.absolutePath}" }
     55 + val execTime = measureTimeMillis {
     56 + val compilationConf = buildCompileConf()
     57 + val evalConf = buildEvalConf(scriptData)
     58 + val result = scriptingHost.eval(scriptData.scriptFile.toScriptSource(), compilationConf, evalConf)
     59 + processEvalResult(result, scriptData)
     60 + }
     61 + scriptData.log.debug { "Script '${scriptData.scriptName}' executed in $execTime ms" }
     62 + }
     63 + 
     64 + private fun processEvalResult(res: ResultWithDiagnostics<EvaluationResult>, scriptData: JadxScriptData) {
     65 + val log = scriptData.log
     66 + for (r in res.reports) {
     67 + val msg = r.render(withSeverity = false)
     68 + when (r.severity) {
     69 + Severity.FATAL, Severity.ERROR -> log.error(r.exception) { "Script execution error: $msg" }
     70 + Severity.WARNING -> log.warn { "Script execution issue: $msg" }
     71 + Severity.INFO -> log.info { "Script report: $msg" }
     72 + Severity.DEBUG -> log.debug { "Script report: $msg" }
     73 + }
     74 + }
     75 + when (res) {
     76 + is ResultWithDiagnostics.Success -> {
     77 + when (val retVal = res.value.returnValue) {
     78 + is ResultValue.Error -> log.error(retVal.error) { "Script execution error:" }
     79 + is ResultValue.Value -> log.info { "Script execution result: $retVal" }
     80 + is ResultValue.Unit -> {}
     81 + ResultValue.NotEvaluated -> {}
     82 + }
     83 + }
     84 + 
     85 + is ResultWithDiagnostics.Failure -> {
     86 + scriptData.error = true
     87 + log.error { "Script execution failed: ${scriptData.scriptName}" }
     88 + }
     89 + }
     90 + }
     91 +}
     92 + 
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/passes/JadxScriptAfterLoadPass.kt
    skipped 2 lines
    3 3  import jadx.api.JadxDecompiler
    4 4  import jadx.api.plugins.pass.impl.SimpleJadxPassInfo
    5 5  import jadx.api.plugins.pass.types.JadxAfterLoadPass
    6  -import jadx.plugins.script.runner.ScriptStates
    7  -import mu.KotlinLogging
     6 +import jadx.plugins.script.runtime.JadxScriptData
    8 7   
    9  -private val LOG = KotlinLogging.logger {}
    10  - 
    11  -class JadxScriptAfterLoadPass(private val scriptStates: ScriptStates) : JadxAfterLoadPass {
     8 +class JadxScriptAfterLoadPass(private val scripts: List<JadxScriptData>) : JadxAfterLoadPass {
    12 9   
    13 10   override fun getInfo() = SimpleJadxPassInfo("JadxScriptAfterLoad", "Execute scripts 'afterLoad' block")
    14 11   
    15 12   override fun init(decompiler: JadxDecompiler) {
    16  - for (script in scriptStates.getScripts()) {
     13 + for (script in scripts) {
    17 14   if (script.error) {
    18 15   continue
    19 16   }
    20 17   try {
    21  - for (b in script.scriptData.afterLoad) {
     18 + for (b in script.afterLoad) {
    22 19   b.invoke()
    23 20   }
    24 21   } catch (e: Throwable) {
    25 22   script.error = true
    26  - LOG.error(e) { "Error executing 'afterLoad' block in script: ${script.scriptFile.name}" }
     23 + script.log.error(e) { "Error executing 'afterLoad' block in script: ${script.scriptFile.name}" }
    27 24   }
    28 25   }
    29 26   }
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/runner/ScriptEval.kt
    1  -package jadx.plugins.script.runner
    2  - 
    3  -import jadx.api.JadxDecompiler
    4  -import jadx.api.plugins.JadxPluginContext
    5  -import jadx.plugins.script.runtime.JadxScriptData
    6  -import jadx.plugins.script.runtime.JadxScriptTemplate
    7  -import jadx.plugins.script.runtime.data.JadxScriptAllOptions
    8  -import mu.KotlinLogging
    9  -import java.io.File
    10  -import kotlin.script.experimental.api.EvaluationResult
    11  -import kotlin.script.experimental.api.ResultValue
    12  -import kotlin.script.experimental.api.ResultWithDiagnostics
    13  -import kotlin.script.experimental.api.ScriptDiagnostic
    14  -import kotlin.script.experimental.api.ScriptEvaluationConfiguration
    15  -import kotlin.script.experimental.api.constructorArgs
    16  -import kotlin.script.experimental.host.toScriptSource
    17  -import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
    18  -import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
    19  -import kotlin.script.experimental.jvmhost.createJvmEvaluationConfigurationFromTemplate
    20  - 
    21  -private val LOG = KotlinLogging.logger {}
    22  - 
    23  -class ScriptEval {
    24  - 
    25  - fun process(init: JadxPluginContext, scriptOptions: JadxScriptAllOptions): ScriptStates? {
    26  - val jadx = init.decompiler as JadxDecompiler
    27  - val scripts = jadx.args.inputFiles.filter { f -> f.name.endsWith(".jadx.kts") }
    28  - if (scripts.isEmpty()) {
    29  - return null
    30  - }
    31  - val scriptStates = ScriptStates()
    32  - for (scriptFile in scripts) {
    33  - val scriptData = JadxScriptData(jadx, init, scriptOptions, scriptFile)
    34  - load(scriptFile, scriptData)
    35  - scriptStates.add(scriptFile, scriptData)
    36  - }
    37  - return scriptStates
    38  - }
    39  - 
    40  - private fun load(scriptFile: File, scriptData: JadxScriptData) {
    41  - LOG.debug { "Loading script: ${scriptFile.absolutePath}" }
    42  - val result = eval(scriptFile, scriptData)
    43  - processEvalResult(result, scriptFile)
    44  - }
    45  - 
    46  - fun buildCompileConf() = createJvmCompilationConfigurationFromTemplate<JadxScriptTemplate>()
    47  - 
    48  - fun buildEvalConf(scriptData: JadxScriptData): ScriptEvaluationConfiguration {
    49  - return createJvmEvaluationConfigurationFromTemplate<JadxScriptTemplate> {
    50  - constructorArgs(scriptData)
    51  - }
    52  - }
    53  - 
    54  - private fun eval(scriptFile: File, scriptData: JadxScriptData): ResultWithDiagnostics<EvaluationResult> {
    55  - val compilationConf = buildCompileConf()
    56  - val evalConf = buildEvalConf(scriptData)
    57  - return BasicJvmScriptingHost().eval(scriptFile.toScriptSource(), compilationConf, evalConf)
    58  - }
    59  - 
    60  - private fun processEvalResult(res: ResultWithDiagnostics<EvaluationResult>, scriptFile: File) {
    61  - when (res) {
    62  - is ResultWithDiagnostics.Success -> {
    63  - val result = res.value.returnValue
    64  - if (result is ResultValue.Error) {
    65  - result.error.printStackTrace()
    66  - }
    67  - }
    68  - is ResultWithDiagnostics.Failure -> {
    69  - LOG.error { "Script execution failed: ${scriptFile.name}" }
    70  - res.reports
    71  - .filter { it.severity >= ScriptDiagnostic.Severity.ERROR }
    72  - .forEach { r ->
    73  - LOG.error(r.exception) { r.render(withSeverity = false) }
    74  - }
    75  - }
    76  - }
    77  - }
    78  -}
    79  - 
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/runner/ScriptStates.kt
    1  -package jadx.plugins.script.runner
    2  - 
    3  -import jadx.plugins.script.runtime.JadxScriptData
    4  -import java.io.File
    5  - 
    6  -data class ScriptStateData(
    7  - val scriptFile: File,
    8  - val scriptData: JadxScriptData,
    9  - var error: Boolean = false
    10  -)
    11  - 
    12  -class ScriptStates {
    13  - 
    14  - private val data: MutableList<ScriptStateData> = ArrayList()
    15  - 
    16  - fun add(scriptFile: File, scriptData: JadxScriptData) {
    17  - data.add(ScriptStateData(scriptFile, scriptData))
    18  - }
    19  - 
    20  - fun getScripts() = data
    21  -}
    22  - 
  • ■ ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-runtime/src/main/kotlin/jadx/plugins/script/runtime/JadxScriptTemplate.kt
    1 1  package jadx.plugins.script.runtime
    2 2   
    3 3  import kotlinx.coroutines.runBlocking
    4  -import mu.KotlinLogging
    5 4  import kotlin.script.experimental.annotations.KotlinScript
    6 5  import kotlin.script.experimental.api.ResultWithDiagnostics
    7 6  import kotlin.script.experimental.api.ScriptAcceptedLocation
    skipped 20 lines
    28 27  import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
    29 28  import kotlin.script.experimental.jvm.jvm
    30 29   
    31  -const val JADX_SCRIPT_LOG_PREFIX = "JadxScript:"
    32  - 
    33 30  @KotlinScript(
    34 31   fileExtension = "jadx.kts",
    35 32   compilationConfiguration = JadxScriptConfiguration::class
    36 33  )
    37  -abstract class JadxScriptTemplate(
    38  - private val scriptData: JadxScriptData
    39  -) {
     34 +abstract class JadxScriptTemplate(scriptData: JadxScriptData) {
    40 35   val scriptName = scriptData.scriptName
    41  - val log = KotlinLogging.logger("$JADX_SCRIPT_LOG_PREFIX$scriptName")
     36 + val log = scriptData.log
    42 37   
    43  - fun getJadxInstance() = JadxScriptInstance(scriptData, log)
     38 + private val scriptInstance = JadxScriptInstance(scriptData, log)
     39 + 
     40 + fun getJadxInstance() = scriptInstance
    44 41   
    45 42   fun println(message: Any?) {
    46 43   log.info(message?.toString())
    skipped 40 lines
  • ■ ■ ■ ■ ■
    jadx-plugins/jadx-script/jadx-script-runtime/src/main/kotlin/jadx/plugins/script/runtime/Runtime.kt jadx-plugins/jadx-script/jadx-script-runtime/src/main/kotlin/jadx/plugins/script/runtime/ScriptRuntime.kt
     1 +@file:JvmName("ScriptRuntime")
    1 2  @file:Suppress("unused", "MemberVisibilityCanBePrivate")
    2 3   
    3 4  package jadx.plugins.script.runtime
    skipped 13 lines
    17 18  import jadx.plugins.script.runtime.data.Search
    18 19  import jadx.plugins.script.runtime.data.Stages
    19 20  import mu.KLogger
     21 +import mu.KotlinLogging
    20 22  import java.io.File
     23 + 
     24 +const val JADX_SCRIPT_LOG_PREFIX = "JadxScript:"
    21 25   
    22 26  class JadxScriptData(
    23 27   val jadxInstance: JadxDecompiler,
    skipped 1 lines
    25 29   val options: JadxScriptAllOptions,
    26 30   val scriptFile: File
    27 31  ) {
    28  - val afterLoad: MutableList<() -> Unit> = ArrayList()
    29  - 
    30 32   val scriptName = scriptFile.name.removeSuffix(".jadx.kts")
     33 + val log = KotlinLogging.logger("$JADX_SCRIPT_LOG_PREFIX$scriptName")
     34 + val afterLoad: MutableList<() -> Unit> = ArrayList()
     35 + var error: Boolean = false
    31 36  }
    32 37   
    33 38  class JadxScriptInstance(
    skipped 36 lines
Please wait...
Page is in error, reload to recover