diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/NewFunctionIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/NewFunctionIns.java index 598a95d80..2c2b30e75 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/NewFunctionIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/NewFunctionIns.java @@ -41,13 +41,13 @@ public class NewFunctionIns extends InstructionDefinition { int methodIndex = ins.operands[0]; MethodBody mybody = abc.findBody(methodIndex); String bodyStr = ""; - String paramStr = ""; + String paramStr = ""; if (mybody != null) { bodyStr = Highlighting.hilighMethodEnd() + mybody.toString(false, isStatic, classIndex, abc, constants, method_info, new Stack()/*scopeStack*/, false, true, fullyQualifiedNames, null) + Highlighting.hilighMethodBegin(body.method_info); paramStr = method_info[methodIndex].getParamStr(constants, mybody, abc, fullyQualifiedNames); } - stack.push(new NewFunctionTreeItem(ins,"", paramStr, method_info[methodIndex].getReturnTypeStr(constants, fullyQualifiedNames), bodyStr)); + stack.push(new NewFunctionTreeItem(ins, "", paramStr, method_info[methodIndex].getReturnTypeStr(constants, fullyQualifiedNames), bodyStr)); } @Override diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/types/ApplyTypeIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/types/ApplyTypeIns.java index 84f2e6730..64e743af9 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/types/ApplyTypeIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/types/ApplyTypeIns.java @@ -49,7 +49,7 @@ public class ApplyTypeIns extends InstructionDefinition { int argCount = ins.operands[0]; List params = new ArrayList(); for (int i = 0; i < argCount; i++) { - params.add(0,stack.pop()); + params.add(0, stack.pop()); } stack.push(new ApplyTypeTreeItem(ins, stack.pop(), params)); } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/NewFunctionTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/NewFunctionTreeItem.java index 317680228..2534d16f2 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/NewFunctionTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/NewFunctionTreeItem.java @@ -38,6 +38,6 @@ public class NewFunctionTreeItem extends TreeItem { @Override public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("new function"+(!functionName.equals("")?" "+functionName:"")+"(" + paramStr + "):" + returnStr + "\r\n{\r\n") + functionBody + "\r\n" + hilight("}"); + return hilight("new function" + (!functionName.equals("") ? " " + functionName : "") + "(" + paramStr + "):" + returnStr + "\r\n{\r\n") + functionBody + "\r\n" + hilight("}"); } } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/IfTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/IfTreeItem.java index c97ebbfc2..e68f78ad2 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/IfTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/IfTreeItem.java @@ -46,7 +46,7 @@ public class IfTreeItem extends TreeItem implements Block { } ret += hilight("}"); if (onFalse.size() > 0) { - ret += "\r\n"+hilight("else")+"\r\n"+hilight("{")+"\r\n"; + ret += "\r\n" + hilight("else") + "\r\n" + hilight("{") + "\r\n"; for (TreeItem ti : onFalse) { ret += ti.toStringSemicoloned(constants, localRegNames, fullyQualifiedNames) + "\r\n"; } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/operations/AddTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/operations/AddTreeItem.java index 5a059617e..7559e7f15 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/operations/AddTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/operations/AddTreeItem.java @@ -18,7 +18,6 @@ package com.jpexs.asdec.abc.avm2.treemodel.operations; import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.asdec.abc.avm2.treemodel.DecrementTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.TreeItem; import java.util.HashMap; import java.util.List; @@ -28,10 +27,10 @@ public class AddTreeItem extends BinaryOpTreeItem { public AddTreeItem(AVM2Instruction instruction, TreeItem leftSide, TreeItem rightSide) { super(instruction, PRECEDENCE_ADDITIVE, leftSide, rightSide, "+"); } - + @Override public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - if(rightSide.precedence>=precedence){ + if (rightSide.precedence >= precedence) { String ret = ""; if (leftSide.precedence > precedence) { ret += "(" + leftSide.toString(constants, localRegNames, fullyQualifiedNames) + ")"; @@ -41,7 +40,7 @@ public class AddTreeItem extends BinaryOpTreeItem { ret += hilight(operator); ret += "(" + rightSide.toString(constants, localRegNames, fullyQualifiedNames) + ")"; return ret; - }else{ + } else { return super.toString(constants, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java index 48cd43b33..87ea3133b 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java @@ -20,6 +20,7 @@ import com.jpexs.asdec.Main; import com.jpexs.asdec.abc.types.traits.Trait; import com.jpexs.asdec.abc.types.traits.TraitClass; import com.jpexs.asdec.tags.DoABCTag; +import java.util.HashMap; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JTree; @@ -31,6 +32,7 @@ import javax.swing.tree.TreePath; public class ClassesListTree extends JTree implements TreeSelectionListener { private List abcList; + private HashMap treeList; public void selectClass(int classIndex) { ClassesListTreeModel model = (ClassesListTreeModel) getModel(); @@ -42,7 +44,8 @@ public class ClassesListTree extends JTree implements TreeSelectionListener { public ClassesListTree(List list) { this.abcList = list; - setModel(new ClassesListTreeModel(list)); + this.treeList = getTreeList(list); + setModel(new ClassesListTreeModel(this.treeList)); addTreeSelectionListener(this); DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer(); ClassLoader cldr = this.getClass().getClassLoader(); @@ -52,9 +55,25 @@ public class ClassesListTree extends JTree implements TreeSelectionListener { setCellRenderer(treeRenderer); } + public HashMap getTreeList(List list) { + HashMap ret = new HashMap(); + for (DoABCTag tag : list) { + for (int i = 0; i < tag.abc.script_info.length; i++) { + String path = tag.abc.script_info[i].getPath(tag.abc); + ret.put(path, new TreeLeafScript(tag.abc, i)); + } + } + return ret; + } + public void setDoABCTags(List list) { this.abcList = list; - setModel(new ClassesListTreeModel(list)); + this.treeList = getTreeList(list); + setModel(new ClassesListTreeModel(this.treeList)); + } + + public void applyFilter(String filter) { + setModel(new ClassesListTreeModel(this.treeList, filter)); } @Override @@ -84,7 +103,7 @@ public class ClassesListTree extends JTree implements TreeSelectionListener { } Main.abcMainFrame.navigator.setABC(abcList, scriptLeaf.abc); Main.abcMainFrame.navigator.setClassIndex(classIndex); - Main.abcMainFrame.setAbc(scriptLeaf.abc); + Main.abcMainFrame.setAbc(scriptLeaf.abc); Main.abcMainFrame.decompiledTextArea.setScript(scriptLeaf.abc.script_info[scriptLeaf.scriptIndex], scriptLeaf.abc, abcList); Main.abcMainFrame.decompiledTextArea.setClassIndex(classIndex); Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setText(""); diff --git a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTreeModel.java b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTreeModel.java index d42f17d1b..0ed846525 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTreeModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTreeModel.java @@ -18,8 +18,7 @@ package com.jpexs.asdec.abc.gui; import com.jpexs.asdec.abc.types.traits.Trait; import com.jpexs.asdec.abc.types.traits.TraitClass; -import com.jpexs.asdec.tags.DoABCTag; -import java.util.List; +import java.util.HashMap; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; @@ -73,18 +72,25 @@ class ClassIndexVisitor implements TreeVisitor { public class ClassesListTreeModel implements TreeModel { private Tree classTree = new Tree(); - private List list; - public ClassesListTreeModel(List list) { - this.list = list; - for (DoABCTag tag : list) { - for (int i = 0; i < tag.abc.script_info.length; i++) { - String path = tag.abc.script_info[i].getPath(tag.abc); - String nsName = path.substring(path.lastIndexOf(".") + 1); - String packageName = path.substring(0, path.lastIndexOf(".")); - classTree.add(nsName, packageName, new TreeLeafScript(tag.abc, i)); + public ClassesListTreeModel(HashMap list) { + this(list, null); + } + + public ClassesListTreeModel(HashMap list, String filter) { + for (String path : list.keySet()) { + if (filter != null) { + if (!filter.equals("")) { + if (!path.contains(filter)) { + continue; + } + } } + String nsName = path.substring(path.lastIndexOf(".") + 1); + String packageName = path.substring(0, path.lastIndexOf(".")); + classTree.add(nsName, packageName, list.get(path)); } + } public Object getItemByPath(String fullPath) { diff --git a/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java b/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java index 760cbb345..1d824744a 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java @@ -49,8 +49,6 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements MouseL public void setClassIndex(int classIndex) { this.classIndex = classIndex; } - - private boolean displayMethod(int pos, int methodIndex) { int bi = abc.findBodyIndex(methodIndex); diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java index 502dc530e..54a016e4c 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java @@ -34,6 +34,8 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.border.BevelBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.table.*; import jsyntaxpane.DefaultSyntaxKit; @@ -60,6 +62,7 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { public JLabel asmLabel = new JLabel("P-code source (editable)"); public JLabel decLabel = new JLabel("ActionScript source"); public DetailPanel detailPanel; + public JTextField filterField = new JTextField(""); public void setStatus(String s) { if (s.equals("")) { @@ -217,8 +220,44 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { navPanel.add(new JScrollPane(navigator), BorderLayout.CENTER); Main.startWork("Building script tree..."); + + filterField.setActionCommand("FILTERSCRIPT"); + filterField.addActionListener(this); + + + filterField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void changedUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void insertUpdate(DocumentEvent e) { + warn(); + } + + public void warn() { + doFilter(); + } + }); + + JPanel treePanel = new JPanel(); + treePanel.setLayout(new BorderLayout()); + treePanel.add(new JScrollPane(classTree = new ClassesListTree(list)), BorderLayout.CENTER); + JPanel searchPanel = new JPanel(); + searchPanel.setLayout(new BorderLayout()); + searchPanel.add(filterField, BorderLayout.CENTER); + JLabel picLabel = new JLabel(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/search.png"))); + searchPanel.add(picLabel, BorderLayout.EAST); + treePanel.add(searchPanel, BorderLayout.SOUTH); + splitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, - new JScrollPane(classTree = new ClassesListTree(list)), + treePanel, navPanel); Main.startWork("Creating window..."); JTabbedPane tabbedPane = new JTabbedPane(); @@ -374,7 +413,16 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { } + private void doFilter() { + classTree.applyFilter(filterField.getText()); + } + public void actionPerformed(ActionEvent e) { + + if (e.getActionCommand().equals("FILTERSCRIPT")) { + doFilter(); + } + if (e.getActionCommand().equals("EXIT")) { setVisible(false); if (Main.proxyFrame != null) { diff --git a/trunk/src/com/jpexs/asdec/abc/types/Multiname.java b/trunk/src/com/jpexs/asdec/abc/types/Multiname.java index 61032caf2..0ab302f72 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/Multiname.java +++ b/trunk/src/com/jpexs/asdec/abc/types/Multiname.java @@ -183,7 +183,7 @@ public class Multiname { } if (params.get(i) == 0) { typeNameStr += "*"; - }else{ + } else { typeNameStr += constants.constant_multiname[params.get(i)].getName(constants, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/asdec/gui/graphics/search.png b/trunk/src/com/jpexs/asdec/gui/graphics/search.png new file mode 100644 index 000000000..15ca0b92b Binary files /dev/null and b/trunk/src/com/jpexs/asdec/gui/graphics/search.png differ