From 85a85aab3f5636cf968170f93683ee5e61c1fdf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 30 Sep 2023 20:48:07 +0200 Subject: [PATCH] Hilighting compound scripts --- .../decompiler/flash/gui/abc/ABCPanel.java | 216 ++++++++++-------- 1 file changed, 115 insertions(+), 101 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 37f6ca7b0..a8e05cced 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -198,7 +198,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener search(final Openable openable, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, CancellableWorker worker, List scope) { if (txt != null && !txt.isEmpty()) { @@ -932,34 +932,34 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener(){ + Configuration.autoDeobfuscate.addListener(new ConfigurationItemChangeListener() { @Override public void configurationItemChanged(Boolean newValue) { deobfuscateButton.setSelected(newValue); } }); - + JButton deobfuscateOptionsButton = new JButton(View.getIcon("deobfuscateoptions16")); deobfuscateOptionsButton.addActionListener(this::deobfuscateOptionsButtonActionPerformed); deobfuscateOptionsButton.setToolTipText(AppStrings.translate("button.deobfuscate_options")); - deobfuscateOptionsButton.setMargin(new Insets(0,0,0,0)); + deobfuscateOptionsButton.setMargin(new Insets(0, 0, 0, 0)); deobfuscateOptionsButton.setPreferredSize(new Dimension(30, deobfuscateButton.getPreferredSize().height)); - + iconsPanel.add(deobfuscateButton); - iconsPanel.add(deobfuscateOptionsButton); - + iconsPanel.add(deobfuscateOptionsButton); + scriptNameLabel = new JLabel("-"); JPanel topPanel = new JPanel(new BorderLayout()); @@ -970,9 +970,9 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener(); libraryComboBox.addItem("AIR (airglobal.swc)"); libraryComboBox.addItem("Flash (playerglobal.swc)"); @@ -993,33 +993,32 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener packs = container.getABC().getScriptPacks(null, allAbcs); - for (ScriptPack pack : packs) { + for (ScriptPack pack : packs) { ClassPath classPath = pack.getClassPath(); if (name.endsWith(classPath.className + classPath.namespaceSuffix) && classPath.toRawString().equals(name)) { - scriptNode = (Tag) container; + scriptNode = (Tag) container; break loopcontainer; } } @@ -1424,12 +1426,12 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener rootNodes = new ArrayList<>(); rootNodes.add(item); + + boolean found = false; + List firstLevelNodes = tree.getFullModel().getAllChildren(item); - for (TreeItem ti :firstLevelNodes) { - if ((ti instanceof AS3Package)&&(((AS3Package)ti).isCompoundScript())) { + for (TreeItem ti : firstLevelNodes) { + if ((ti instanceof AS3Package) && (((AS3Package) ti).isCompoundScript())) { rootNodes.add(ti); + if (parts.length == 1 && parts[0].equals("script_" + ((AS3Package) ti).getCompoundScriptIndex())) { + found = true; + item = ti; + break; + } } } - - looproot:for (Object root : rootNodes) { - item = root; - loopparts: - for (int i = 0; i < parts.length; i++) { - boolean found = false; - for (TreeItem ti : tree.getFullModel().getAllChildren(item)) { - if ((ti instanceof AS3Package) && ((AS3Package) ti).isFlat()) { - AS3Package pti = (AS3Package) ti; - if ((pkg.isEmpty() && pti.isDefaultPackage()) || (!pti.isDefaultPackage() && pkg.equals(pti.packageName))) { - item = pti; - i = parts.length - 1 - 1; - found = true; - break; - } - continue; - } - if ((ti instanceof AS3Package)&&(((AS3Package)ti).isCompoundScript())) { - continue; - } - if (ti instanceof AS3ClassTreeItem) { - AS3ClassTreeItem cti = (AS3ClassTreeItem) ti; - if (parts[i].equals(cti.getPrintableNameWithNamespaceSuffix())) { - item = ti; - found = true; - break; + if (!found) { + looproot: + for (Object root : rootNodes) { + item = root; + loopparts: + for (int i = 0; i < parts.length; i++) { + found = false; + for (TreeItem ti : tree.getFullModel().getAllChildren(item)) { + if ((ti instanceof AS3Package) && ((AS3Package) ti).isFlat()) { + AS3Package pti = (AS3Package) ti; + if ((pkg.isEmpty() && pti.isDefaultPackage()) || (!pti.isDefaultPackage() && pkg.equals(pti.packageName))) { + item = pti; + i = parts.length - 1 - 1; + found = true; + break; + } + continue; + } + if ((ti instanceof AS3Package) && (((AS3Package) ti).isCompoundScript())) { + continue; + } + if (ti instanceof AS3ClassTreeItem) { + AS3ClassTreeItem cti = (AS3ClassTreeItem) ti; + + if (parts[i].equals(cti.getPrintableNameWithNamespaceSuffix())) { + item = ti; + found = true; + break; + } } } + if (!found) { + continue looproot; + } } - if (!found) { - continue looproot; - } + break; //found } - break; //found + } + if (!found) { + return; } mainPanel.setTagTreeSelectedNode(mainPanel.getCurrentTree(), (TreeItem) item); mainPanel.reload(true); @@ -1582,10 +1598,10 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener= 0 && globalTraitIndex < staticTraits.traits.size() + instanceTraits.traits.size()) { - traitIndex = globalTraitIndex - staticTraits.traits.size(); + traitIndex = globalTraitIndex - staticTraits.traits.size(); traitType = GraphTextWriter.TRAIT_INSTANCE_INITIALIZER; } else { return; } } - } - + } + ABCExplorerDialog dialog = mainPanel.showAbcExplorer(abc.getOpenable(), abc); dialog.selectTrait(decompiledTextArea.getScriptLeaf().scriptIndex, classIndex, traitIndex, traitType); } - + private void removeTraitButtonActionPerformed(ActionEvent evt) { int classIndex = decompiledTextArea.getClassIndex(); //int scriptIndex = decompiledTextArea.getScriptLeaf().scriptIndex; @@ -1867,7 +1881,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener()); + navigator.setModel(new DefaultListModel<>()); switch (kind) { case Trait.TRAIT_GETTER: case Trait.TRAIT_SETTER: @@ -1979,7 +1993,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener