refactor: make input plugin api similar to pass plugins
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+3
-3
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user