performance fixes

This commit is contained in:
2015-03-19 21:22:39 +01:00
parent 9095d75d5e
commit 2ada8667bb
10 changed files with 122 additions and 108 deletions
@@ -867,22 +867,14 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec
public void doFilter() {
List<TreeItem> nodes = getASTreeNodes(tagTree);
boolean updateNeeded = false;
for (TreeItem n : nodes) {
if (n instanceof ClassesListTreeModel) {
((ClassesListTreeModel) n).setFilter(filterField.getText());
updateNeeded = true;
TagTreeModel tm = tagTree.getModel();
tm.updateNode(n);
View.expandTreeNodes(tagTree, tm.getTreePath(n), true);
}
}
if (updateNeeded) {
View.execInEventDispatch(new Runnable() {
@Override
public void run() {
tagTree.updateUI();
}
});
}
}
@Override
@@ -58,7 +58,6 @@ import com.jpexs.decompiler.flash.gui.abc.tablemodels.StringTableModel;
import com.jpexs.decompiler.flash.gui.abc.tablemodels.UIntTableModel;
import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel;
import com.jpexs.decompiler.flash.helpers.Freed;
import com.jpexs.decompiler.flash.helpers.collections.MyEntry;
import com.jpexs.decompiler.flash.tags.ABCContainerTag;
import com.jpexs.decompiler.flash.treeitems.TreeItem;
import com.jpexs.decompiler.graph.CompilationException;
@@ -177,16 +176,15 @@ public class ABCPanel extends JPanel implements ItemListener, ActionListener, Se
final List<ABCPanelSearchResult> found = new ArrayList<>();
if (scriptsNode instanceof ClassesListTreeModel) {
ClassesListTreeModel clModel = (ClassesListTreeModel) scriptsNode;
List<MyEntry<ClassPath, ScriptPack>> allpacks = clModel.getList();
List<ScriptPack> allpacks = clModel.getList();
final Pattern pat = regexp
? Pattern.compile(txt, ignoreCase ? Pattern.CASE_INSENSITIVE : 0)
: Pattern.compile(Pattern.quote(txt), ignoreCase ? Pattern.CASE_INSENSITIVE : 0);
int pos = 0;
for (final MyEntry<ClassPath, ScriptPack> item : allpacks) {
for (final ScriptPack pack : allpacks) {
pos++;
String workText = AppStrings.translate("work.searching");
String decAdd = "";
final ScriptPack pack = item.getValue();
if (!SWF.isCached(pack)) {
decAdd = ", " + AppStrings.translate("work.decompiling");
}
@@ -199,14 +197,13 @@ public class ABCPanel extends JPanel implements ItemListener, ActionListener, Se
if (pat.matcher(SWF.getCached(pack).text).find()) {
ABCPanelSearchResult searchResult = new ABCPanelSearchResult();
searchResult.scriptPack = pack;
searchResult.classPath = item.getKey();
found.add(searchResult);
}
return null;
}
};
worker.execute();
Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + pos + "/" + allpacks.size() + ") " + item.getKey().toString() + "... ", worker);
Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + pos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker);
worker.get();
} catch (InterruptedException ex) {
break;
@@ -686,12 +683,12 @@ public class ABCPanel extends JPanel implements ItemListener, ActionListener, Se
if (scriptsNode instanceof ClassesListTreeModel) {
ClassesListTreeModel clModel = (ClassesListTreeModel) scriptsNode;
ScriptPack pack = null;
for (MyEntry<ClassPath, ScriptPack> item : clModel.getList()) {
ClassPath classPath = item.getKey();
for (ScriptPack item : clModel.getList()) {
ClassPath classPath = item.getClassPath();
// first check the className to avoid calling unnecessary toString
if (name.endsWith(classPath.className) && classPath.toString().equals(name)) {
pack = item.getValue();
pack = item;
break;
}
}
@@ -807,9 +804,9 @@ public class ABCPanel extends JPanel implements ItemListener, ActionListener, Se
try {
String oldSp = null;
List<MyEntry<ClassPath, ScriptPack>> packs = abc.script_info.get(oldIndex).getPacks(abc, oldIndex);
List<ScriptPack> packs = abc.script_info.get(oldIndex).getPacks(abc, oldIndex);
if (!packs.isEmpty()) {
oldSp = packs.get(0).getKey().toString();
oldSp = packs.get(0).getClassPath().toString();
}
String as = decompiledTextArea.getText();
@@ -16,7 +16,6 @@
*/
package com.jpexs.decompiler.flash.gui.abc;
import com.jpexs.decompiler.flash.abc.ClassPath;
import com.jpexs.decompiler.flash.abc.ScriptPack;
/**
@@ -27,10 +26,8 @@ public class ABCPanelSearchResult {
public ScriptPack scriptPack;
public ClassPath classPath;
@Override
public String toString() {
return classPath.toString();
return scriptPack.getClassPath().toString();
}
}
@@ -17,12 +17,10 @@
package com.jpexs.decompiler.flash.gui.abc;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.abc.ClassPath;
import com.jpexs.decompiler.flash.abc.ScriptPack;
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
import com.jpexs.decompiler.flash.abc.types.traits.TraitClass;
import com.jpexs.decompiler.flash.gui.AppStrings;
import com.jpexs.decompiler.flash.helpers.collections.MyEntry;
import com.jpexs.decompiler.flash.timeline.AS3Package;
import com.jpexs.decompiler.flash.treeitems.AS3ClassTreeItem;
import java.util.ArrayList;
@@ -37,13 +35,13 @@ public class ClassesListTreeModel extends AS3ClassTreeItem implements TreeModel
private SWF swf;
private List<MyEntry<ClassPath, ScriptPack>> list;
private List<ScriptPack> list;
private AS3Package root;
private final List<TreeModelListener> listeners = new ArrayList<>();
public List<MyEntry<ClassPath, ScriptPack>> getList() {
public List<ScriptPack> getList() {
return list;
}
@@ -73,19 +71,18 @@ public class ClassesListTreeModel extends AS3ClassTreeItem implements TreeModel
}
public final void setFilter(String filter) {
root.scripts.clear();
root.subPackages.clear();
root.clear();
filter = (filter == null || filter.isEmpty()) ? null : filter.toLowerCase();
for (MyEntry<ClassPath, ScriptPack> item : list) {
for (ScriptPack item : list) {
if (filter != null) {
if (!item.getKey().toString().toLowerCase().contains(filter)) {
if (!item.getClassPath().toString().toLowerCase().contains(filter)) {
continue;
}
}
AS3Package pkg = ensurePackage(item.getKey().packageStr);
pkg.scripts.put(item.getKey().className, item.getValue());
AS3Package pkg = ensurePackage(item.getClassPath().packageStr);
pkg.addScriptPack(item);
}
}
@@ -94,10 +91,10 @@ public class ClassesListTreeModel extends AS3ClassTreeItem implements TreeModel
AS3Package parent = root;
while (st.hasMoreTokens()) {
String pathElement = st.nextToken();
AS3Package pkg = parent.subPackages.get(pathElement);
AS3Package pkg = parent.getSubPackage(pathElement);
if (pkg == null) {
pkg = new AS3Package(pathElement, swf);
parent.subPackages.put(pathElement, pkg);
parent.addSubPackage(pkg);
}
parent = pkg;
@@ -111,14 +108,14 @@ public class ClassesListTreeModel extends AS3ClassTreeItem implements TreeModel
}
private ScriptPack getElementByClassIndexRecursive(AS3Package item, int classIndex) {
for (AS3Package pkg : item.subPackages.values()) {
for (AS3Package pkg : item.getSubPackages()) {
ScriptPack result = getElementByClassIndexRecursive(pkg, classIndex);
if (result != null) {
return result;
}
}
for (ScriptPack sc : item.scripts.values()) {
for (ScriptPack sc : item.getScriptPacks()) {
for (Trait t : sc.abc.script_info.get(sc.scriptIndex).traits.traits) {
if (t instanceof TraitClass) {
if (((TraitClass) t).class_info == classIndex) {
@@ -140,7 +137,7 @@ public class ClassesListTreeModel extends AS3ClassTreeItem implements TreeModel
AS3Package pkg = (AS3Package) parent;
return pkg.getAllChildren();
}
@Override
public AS3ClassTreeItem getChild(Object parent, int index) {
AS3Package pkg = (AS3Package) parent;
@@ -18,14 +18,12 @@ package com.jpexs.decompiler.flash.gui.debugger;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.abc.ABC;
import com.jpexs.decompiler.flash.abc.ClassPath;
import com.jpexs.decompiler.flash.abc.ScriptPack;
import com.jpexs.decompiler.flash.abc.types.Multiname;
import com.jpexs.decompiler.flash.abc.types.Namespace;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.gui.DebugLogDialog;
import com.jpexs.decompiler.flash.gui.Main;
import com.jpexs.decompiler.flash.helpers.collections.MyEntry;
import com.jpexs.decompiler.flash.tags.ABCContainerTag;
import com.jpexs.decompiler.flash.tags.Tag;
import com.jpexs.helpers.Helper;
@@ -49,9 +47,9 @@ public class DebuggerTools {
private static ScriptPack getDebuggerScriptPack(SWF swf) {
for (ABCContainerTag ac : swf.getAbcList()) {
ABC a = ac.getABC();
for (MyEntry<ClassPath, ScriptPack> m : a.getScriptPacks()) {
if (isDebuggerClass(m.getKey().packageStr, null)) {
return m.getValue();
for (ScriptPack m : a.getScriptPacks()) {
if (isDebuggerClass(m.getClassPath().packageStr, null)) {
return m;
}
}
}