refactor: make input plugin api similar to pass plugins

This commit is contained in:
Skylot
2022-08-22 17:47:58 +01:00
parent 0c4d46ead5
commit a89dbc1152
38 changed files with 370 additions and 379 deletions
@@ -19,14 +19,13 @@ import jadx.api.JavaNode;
import jadx.api.JavaPackage;
import jadx.api.ResourceFile;
import jadx.api.impl.InMemoryCodeCache;
import jadx.api.impl.plugins.PluginsContext;
import jadx.api.metadata.ICodeNodeRef;
import jadx.api.plugins.JadxPlugin;
import jadx.api.plugins.JadxPluginManager;
import jadx.core.dex.nodes.ClassNode;
import jadx.core.dex.nodes.ProcessState;
import jadx.core.dex.nodes.RootNode;
import jadx.core.utils.exceptions.JadxRuntimeException;
import jadx.gui.plugins.context.PluginsContext;
import jadx.gui.plugins.context.GuiPluginsContext;
import jadx.gui.settings.JadxProject;
import jadx.gui.settings.JadxSettings;
import jadx.gui.ui.MainWindow;
@@ -47,7 +46,7 @@ public class JadxWrapper {
private final MainWindow mainWindow;
private volatile @Nullable JadxDecompiler decompiler;
private PluginsContext pluginsContext;
private GuiPluginsContext guiPluginsContext;
public JadxWrapper(MainWindow mainWindow) {
this.mainWindow = mainWindow;
@@ -62,8 +61,8 @@ public class JadxWrapper {
project.fillJadxArgs(jadxArgs);
this.decompiler = new JadxDecompiler(jadxArgs);
this.pluginsContext = new PluginsContext(mainWindow);
this.decompiler.setJadxGuiContext(pluginsContext);
this.guiPluginsContext = new GuiPluginsContext(mainWindow);
this.decompiler.getPluginsContext().setGuiContext(guiPluginsContext);
this.decompiler.load();
initCodeCache();
}
@@ -89,9 +88,9 @@ public class JadxWrapper {
decompiler.close();
decompiler = null;
}
if (pluginsContext != null) {
pluginsContext.reset();
pluginsContext = null;
if (guiPluginsContext != null) {
guiPluginsContext.reset();
guiPluginsContext = null;
}
}
} catch (Exception e) {
@@ -197,13 +196,14 @@ public class JadxWrapper {
getSettings().sync();
}
public List<JadxPlugin> getAllPlugins() {
public PluginsContext getPluginsContext() {
if (decompiler != null) {
return decompiler.getPluginManager().getAllPlugins();
return decompiler.getPluginsContext();
}
try (JadxDecompiler tmpDecompiler = new JadxDecompiler()) {
tmpDecompiler.load();
return tmpDecompiler.getPluginsContext();
}
JadxPluginManager pluginManager = new JadxPluginManager();
pluginManager.load();
return pluginManager.getAllPlugins();
}
/**
@@ -10,12 +10,12 @@ import jadx.gui.ui.MainWindow;
import jadx.gui.utils.UiUtils;
import jadx.gui.utils.ui.ActionHandler;
public class PluginsContext implements JadxGuiContext {
private static final Logger LOG = LoggerFactory.getLogger(PluginsContext.class);
public class GuiPluginsContext implements JadxGuiContext {
private static final Logger LOG = LoggerFactory.getLogger(GuiPluginsContext.class);
private final MainWindow mainWindow;
public PluginsContext(MainWindow mainWindow) {
public GuiPluginsContext(MainWindow mainWindow) {
this.mainWindow = mainWindow;
}
@@ -21,6 +21,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -61,8 +62,8 @@ import jadx.api.JadxArgs;
import jadx.api.JadxArgs.UseKotlinMethodsForVarNames;
import jadx.api.args.GeneratedRenamesMappingFileMode;
import jadx.api.args.ResourceNameSource;
import jadx.api.impl.plugins.PluginsContext;
import jadx.api.plugins.JadxPlugin;
import jadx.api.plugins.JadxPluginInfo;
import jadx.api.plugins.options.JadxPluginOptions;
import jadx.api.plugins.options.OptionDescription;
import jadx.gui.ui.MainWindow;
@@ -602,14 +603,18 @@ public class JadxSettingsWindow extends JDialog {
private SettingsGroup makePluginOptionsGroup() {
SettingsGroup pluginsGroup = new SettingsGroup(NLS.str("preferences.plugins"));
for (JadxPlugin plugin : mainWindow.getWrapper().getAllPlugins()) {
if (!(plugin instanceof JadxPluginOptions)) {
continue;
}
JadxPluginInfo pluginInfo = plugin.getPluginInfo();
JadxPluginOptions optPlugin = (JadxPluginOptions) plugin;
for (OptionDescription opt : optPlugin.getOptionsDescriptions()) {
String title = "[" + pluginInfo.getPluginId() + "] " + opt.description();
PluginsContext pluginsContext = mainWindow.getWrapper().getPluginsContext();
for (Map.Entry<JadxPlugin, JadxPluginOptions> entry : pluginsContext.getOptionsMap().entrySet()) {
JadxPlugin plugin = entry.getKey();
JadxPluginOptions options = entry.getValue();
String pluginId = plugin.getPluginInfo().getPluginId();
for (OptionDescription opt : options.getOptionsDescriptions()) {
String title;
if (pluginId.equals("jadx-script")) {
title = '[' + opt.name().replace("jadx-script.", "script:") + "] " + opt.description();
} else {
title = '[' + pluginId + "] " + opt.description();
}
if (opt.values().isEmpty() || opt.getType() == OptionDescription.OptionType.BOOLEAN) {
try {
pluginsGroup.addRow(title, getPluginOptionEditor(opt));