diff --git a/trunk/src/com/jpexs/asdec/Main.java b/trunk/src/com/jpexs/asdec/Main.java index 404772d00..2a4443443 100644 --- a/trunk/src/com/jpexs/asdec/Main.java +++ b/trunk/src/com/jpexs/asdec/Main.java @@ -149,7 +149,7 @@ public class Main { if (actionMainFrame != null) { actionMainFrame.setStatus(name); } - if(loadingDialog!=null){ + if (loadingDialog != null) { loadingDialog.setDetail(name); } if (Main.isCommandLineMode()) { @@ -165,7 +165,7 @@ public class Main { if (actionMainFrame != null) { actionMainFrame.setStatus(""); } - if(loadingDialog!=null){ + if (loadingDialog != null) { loadingDialog.setDetail(""); } } diff --git a/trunk/src/com/jpexs/asdec/SWF.java b/trunk/src/com/jpexs/asdec/SWF.java index e5a04757e..007ff01cc 100644 --- a/trunk/src/com/jpexs/asdec/SWF.java +++ b/trunk/src/com/jpexs/asdec/SWF.java @@ -305,12 +305,11 @@ public class SWF { } } for (int i = 0; i < abcTags.size(); i++) { - DoABCTag t=abcTags.get(i); + DoABCTag t = abcTags.get(i); t.abc.addEventListener(evl); - t.abc.export(outdir, isPcode, abcTags,"tag "+(i+1)+"/"+abcTags.size()+" "); + t.abc.export(outdir, isPcode, abcTags, "tag " + (i + 1) + "/" + abcTags.size() + " "); } for (DoABCTag t : abcTags) { - } if (!asV3Found) { diff --git a/trunk/src/com/jpexs/asdec/abc/ABC.java b/trunk/src/com/jpexs/asdec/abc/ABC.java index 7e577695d..dfdc4b409 100644 --- a/trunk/src/com/jpexs/asdec/abc/ABC.java +++ b/trunk/src/com/jpexs/asdec/abc/ABC.java @@ -529,7 +529,7 @@ public class ABC { } String cnt = ""; if (script_info.length > 1) { - cnt = "script " + (i + 1) + "/" + script_info.length+" "; + cnt = "script " + (i + 1) + "/" + script_info.length + " "; } String exStr = "Exporting " + abcStr + cnt + path + " ..."; informListeners("export", exStr); diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java index 009dca522..a5302737c 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java @@ -955,8 +955,7 @@ public class AVM2Code { output.remove(i); i--; } - }else - if (output.get(i) instanceof WithTreeItem) { + } else if (output.get(i) instanceof WithTreeItem) { clearTemporaryRegisters(((WithTreeItem) output.get(i)).items); } } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/ConstructIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/ConstructIns.java index 1d0344d26..6d3192ca2 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/ConstructIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/construction/ConstructIns.java @@ -55,21 +55,21 @@ public class ConstructIns extends InstructionDefinition { //push new instance } - private boolean walkXML(TreeItem item,List list){ - boolean ret=true; - if(item instanceof StringTreeItem){ + private boolean walkXML(TreeItem item, List list) { + boolean ret = true; + if (item instanceof StringTreeItem) { list.add(item); - }else if(item instanceof AddTreeItem){ - ret=ret && walkXML(((AddTreeItem)item).leftSide,list); - ret=ret && walkXML(((AddTreeItem)item).rightSide,list); - }else if(item instanceof EscapeXElemTreeItem){ + } else if (item instanceof AddTreeItem) { + ret = ret && walkXML(((AddTreeItem) item).leftSide, list); + ret = ret && walkXML(((AddTreeItem) item).rightSide, list); + } else if (item instanceof EscapeXElemTreeItem) { list.add(item); - }else{ + } else { return false; } - return ret; + return ret; } - + @Override public void translate(boolean isStatic, int classIndex, java.util.HashMap localRegs, Stack stack, java.util.Stack scopeStack, ConstantPool constants, AVM2Instruction ins, MethodInfo[] method_info, List output, com.jpexs.asdec.abc.types.MethodBody body, com.jpexs.asdec.abc.ABC abc, HashMap localRegNames, List fullyQualifiedNames) { int argCount = ins.operands[0]; @@ -86,7 +86,7 @@ public class ConstructIns extends InstructionDefinition { if (args.size() == 1) { TreeItem arg = args.get(0); List xmlLines = new ArrayList(); - if (walkXML(arg,xmlLines)) { + if (walkXML(arg, xmlLines)) { stack.push(new XMLTreeItem(ins, xmlLines)); return; } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/executing/CallSuperVoidIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/executing/CallSuperVoidIns.java index 928d8ed8d..28b4b837c 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/executing/CallSuperVoidIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/executing/CallSuperVoidIns.java @@ -58,7 +58,7 @@ public class CallSuperVoidIns extends InstructionDefinition { int argCount = ins.operands[1]; List args = new ArrayList(); for (int a = 0; a < argCount; a++) { - args.add(0,(TreeItem) stack.pop()); + args.add(0, (TreeItem) stack.pop()); } FullMultinameTreeItem multiname = resolveMultiname(stack, constants, multinameIndex, ins); TreeItem receiver = (TreeItem) stack.pop(); diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java index 0319aa0ee..2d0d32d38 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java @@ -17,7 +17,6 @@ package com.jpexs.asdec.abc.avm2.instructions.stack; import com.jpexs.asdec.abc.ABC; -import com.jpexs.asdec.abc.avm2.AVM2Code; import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.LocalDataArea; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; @@ -46,8 +45,8 @@ public class PopScopeIns extends InstructionDefinition { @Override public void translate(boolean isStatic, int classIndex, java.util.HashMap localRegs, Stack stack, Stack scopeStack, ConstantPool constants, AVM2Instruction ins, MethodInfo[] method_info, List output, MethodBody body, ABC abc, HashMap localRegNames, List fullyQualifiedNames) { TreeItem scope = (TreeItem) scopeStack.pop(); - if(scope instanceof WithObjectTreeItem){ - scope = ((WithObjectTreeItem)scope).scope; + if (scope instanceof WithObjectTreeItem) { + scope = ((WithObjectTreeItem) scope).scope; } for (int i = output.size() - 1; i >= 0; i--) { if (output.get(i) instanceof WithTreeItem) { @@ -60,7 +59,7 @@ public class PopScopeIns extends InstructionDefinition { } while (output.size() > i + 1) { output.remove(i + 1); - } + } /*int count=output.size()-1-(i+1); for(int c=0;c localRegs, Stack stack, Stack scopeStack, ConstantPool constants, AVM2Instruction ins, MethodInfo[] method_info, List output, MethodBody body, ABC abc, HashMap localRegNames, List fullyQualifiedNames) { TreeItem w = (TreeItem) stack.pop(); - WithObjectTreeItem wot = new WithObjectTreeItem(ins,w); + WithObjectTreeItem wot = new WithObjectTreeItem(ins, w); scopeStack.push(wot); output.add(new WithTreeItem(ins, w)); } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/CheckFilterIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/CheckFilterIns.java index 99b596a81..7190afb49 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/CheckFilterIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/CheckFilterIns.java @@ -41,8 +41,8 @@ public class CheckFilterIns extends InstructionDefinition { @Override public void translate(boolean isStatic, int classIndex, java.util.HashMap localRegs, Stack stack, java.util.Stack scopeStack, ConstantPool constants, AVM2Instruction ins, MethodInfo[] method_info, List output, com.jpexs.asdec.abc.types.MethodBody body, com.jpexs.asdec.abc.ABC abc, HashMap localRegNames, List fullyQualifiedNames) { - TreeItem obj=stack.pop(); - stack.push(new FilteredCheckTreeItem(ins, obj)); + TreeItem obj = stack.pop(); + stack.push(new FilteredCheckTreeItem(ins, obj)); } @Override diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/EscXElemIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/EscXElemIns.java index 87ffe8deb..0b0159468 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/EscXElemIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/xml/EscXElemIns.java @@ -23,7 +23,6 @@ import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; import com.jpexs.asdec.abc.avm2.instructions.InstructionDefinition; import com.jpexs.asdec.abc.avm2.treemodel.EscapeXElemTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.TreeItem; -import com.jpexs.asdec.abc.avm2.treemodel.UnparsedTreeItem; import com.jpexs.asdec.abc.types.MethodInfo; import java.util.HashMap; import java.util.List; diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FilteredCheckTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FilteredCheckTreeItem.java index 7d3e72afb..54dd2fec3 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FilteredCheckTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FilteredCheckTreeItem.java @@ -28,15 +28,14 @@ import java.util.List; public class FilteredCheckTreeItem extends TreeItem { TreeItem object; - - public FilteredCheckTreeItem(AVM2Instruction instruction,TreeItem object) { + + public FilteredCheckTreeItem(AVM2Instruction instruction, TreeItem object) { super(instruction, NOPRECEDENCE); - this.object=object; + this.object = object; } @Override public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { return object.toString(constants, localRegNames, fullyQualifiedNames); } - } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FullMultinameTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FullMultinameTreeItem.java index ea438125e..0b5a79a4d 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FullMultinameTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/FullMultinameTreeItem.java @@ -69,7 +69,7 @@ public class FullMultinameTreeItem extends TreeItem { cns = ns.getName(constants); } } - return cname.equals("XML")&&cns.equals(""); + return cname.equals("XML") && cns.equals(""); } @Override diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/LocalRegTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/LocalRegTreeItem.java index 311e688ef..ddb16f84a 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/LocalRegTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/LocalRegTreeItem.java @@ -38,7 +38,7 @@ public class LocalRegTreeItem extends TreeItem { @Override public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - if(computedValue instanceof FilterTreeItem){ + if (computedValue instanceof FilterTreeItem) { return computedValue.toString(constants, localRegNames, fullyQualifiedNames); } return hilight(localRegName(localRegNames, regIndex)); diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/WithObjectTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/WithObjectTreeItem.java index fd69b7307..0bbf8700a 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/WithObjectTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/WithObjectTreeItem.java @@ -24,7 +24,7 @@ import java.util.List; public class WithObjectTreeItem extends TreeItem { public TreeItem scope; - + public WithObjectTreeItem(AVM2Instruction instruction, TreeItem scope) { super(instruction, PRECEDENCE_PRIMARY); this.scope = scope; diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/FilterTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/FilterTreeItem.java index f961d46a6..94d69321a 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/FilterTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/FilterTreeItem.java @@ -39,6 +39,6 @@ public class FilterTreeItem extends TreeItem { @Override public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return collection.toString(constants, localRegNames, fullyQualifiedNames)+hilight(".(") + expression.toString(constants, localRegNames, fullyQualifiedNames) + hilight(")"); + return collection.toString(constants, localRegNames, fullyQualifiedNames) + hilight(".(") + expression.toString(constants, localRegNames, fullyQualifiedNames) + hilight(")"); } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java index 2cd22cf1c..e0a9e344d 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java @@ -81,8 +81,8 @@ public class ClassesListTree extends JTree implements TreeSelectionListener { break; } } - Main.abcMainFrame.navigator.setClassIndex(classIndex); Main.abcMainFrame.navigator.setABC(abcList, scriptLeaf.abc); + Main.abcMainFrame.navigator.setClassIndex(classIndex); Main.abcMainFrame.setAbc(scriptLeaf.abc); Main.abcMainFrame.decompiledTextArea.setScript(scriptLeaf.abc.script_info[scriptLeaf.scriptIndex], scriptLeaf.abc, abcList); Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setText(""); diff --git a/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java b/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java index 564885252..842734f45 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java @@ -83,7 +83,7 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements MouseL getCaret().setVisible(true); int pos = getCaretPosition(); - + classIndex = -1; for (Highlighting cm : classHighlights) { if ((pos >= cm.startPos) && (pos < cm.startPos + cm.len)) { classIndex = (int) cm.offset; diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java index ebeae8852..502dc530e 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java @@ -17,7 +17,6 @@ package com.jpexs.asdec.abc.gui; import com.jpexs.asdec.Configuration; -import com.jpexs.asdec.EventListener; import com.jpexs.asdec.Main; import com.jpexs.asdec.abc.ABC; import com.jpexs.asdec.abc.gui.tablemodels.*; @@ -30,7 +29,6 @@ import java.awt.Dimension; import java.awt.event.*; import java.io.IOException; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -62,7 +60,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 void setStatus(String s) { if (s.equals("")) { loadingPanel.setVisible(false); @@ -339,7 +337,7 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { setJMenuBar(menuBar); - + JPanel panConstants = new JPanel(); panConstants.setLayout(new BorderLayout()); constantTypeList = new JComboBox(new String[]{"UINT", "INT", "DOUBLE", "DECIMAL", "STRING", "NAMESPACE", "NAMESPACESET", "MULTINAME"}); @@ -373,7 +371,7 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { tabbedPane.addTab("Constants", panConstants); View.centerScreen(this); Main.stopWork(); - + } public void actionPerformed(ActionEvent e) { diff --git a/trunk/src/com/jpexs/asdec/abc/types/ScriptInfo.java b/trunk/src/com/jpexs/asdec/abc/types/ScriptInfo.java index a7eba79d2..f40124060 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/ScriptInfo.java +++ b/trunk/src/com/jpexs/asdec/abc/types/ScriptInfo.java @@ -41,7 +41,7 @@ public class ScriptInfo { for (Trait t : traits.traits) { Multiname name = t.getName(abc); Namespace ns = name.getNamespace(abc.constants); - if ((ns.kind == Namespace.KIND_PACKAGE)||(ns.kind == Namespace.KIND_PACKAGE_INTERNAL)) { + if ((ns.kind == Namespace.KIND_PACKAGE) || (ns.kind == Namespace.KIND_PACKAGE_INTERNAL)) { return ns.getName(abc.constants) + "." + name.getName(abc.constants, new ArrayList()); } } diff --git a/trunk/src/com/jpexs/asdec/abc/types/traits/Trait.java b/trunk/src/com/jpexs/asdec/abc/types/traits/Trait.java index 5f1bc2127..308d4b8f1 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/traits/Trait.java +++ b/trunk/src/com/jpexs/asdec/abc/types/traits/Trait.java @@ -50,7 +50,8 @@ public abstract class Trait { Multiname m = getName(abc); if (m != null) { String nsname = ""; - if (abc.constants.constant_namespace[m.namespace_index].kind == Namespace.KIND_NAMESPACE) { + //if (abc.constants.constant_namespace[m.namespace_index].kind == Namespace.KIND_NAMESPACE) { + { for (DoABCTag abcTag : abcTags) { nsname = abcTag.abc.nsValueToName(abc.constants.constant_namespace[m.namespace_index].getName(abc.constants)); if (nsname.equals("-")) { @@ -121,7 +122,7 @@ public abstract class Trait { protected String makePackageFromIndex(ABC abc, int name_index, String value) { Namespace ns = abc.constants.constant_multiname[name_index].getNamespace(abc.constants); - if (ns.kind == Namespace.KIND_PACKAGE) { + if ((ns.kind == Namespace.KIND_PACKAGE) || (ns.kind == Namespace.KIND_PACKAGE_INTERNAL)) { String nsname = ns.getName(abc.constants); return "package " + nsname + "\r\n{\r\n" + value + "\r\n}"; } diff --git a/trunk/src/com/jpexs/asdec/abc/types/traits/TraitClass.java b/trunk/src/com/jpexs/asdec/abc/types/traits/TraitClass.java index 81c689325..48be32f45 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/traits/TraitClass.java +++ b/trunk/src/com/jpexs/asdec/abc/types/traits/TraitClass.java @@ -20,6 +20,10 @@ import com.jpexs.asdec.abc.ABC; import com.jpexs.asdec.abc.avm2.AVM2Code; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; import com.jpexs.asdec.abc.avm2.instructions.construction.NewFunctionIns; +import com.jpexs.asdec.abc.avm2.instructions.other.FindPropertyIns; +import com.jpexs.asdec.abc.avm2.instructions.other.FindPropertyStrictIns; +import com.jpexs.asdec.abc.avm2.instructions.other.GetLexIns; +import com.jpexs.asdec.abc.avm2.instructions.types.CoerceIns; import com.jpexs.asdec.abc.avm2.treemodel.InitPropertyTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.SetPropertyTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.TreeItem; @@ -43,25 +47,35 @@ public class TraitClass extends Trait { public int slot_id; public int class_info; + private static final String[] builtInClasses = {"ArgumentError", "arguments", "Array", "Boolean", "Class", "Date", "DefinitionError", "Error", "EvalError", "Function", "int", "JSON", "Math", "Namespace", "Number", "Object", "QName", "RangeError", "ReferenceError", "RegExp", "SecurityError", "String", "SyntaxError", "TypeError", "uint", "URIError", "VerifyError", "XML", "XMLList"}; + + private static boolean isBuiltInClass(String name) { + for (String g : builtInClasses) { + if (g.equals(name)) { + return true; + } + } + return false; + } @Override public String toString(ABC abc, List fullyQualifiedNames) { return "Class " + abc.constants.constant_multiname[name_index].toString(abc.constants, fullyQualifiedNames) + " slot=" + slot_id + " class_info=" + class_info + " metadata=" + Helper.intArrToString(metadata); } - private void parseImportsUsagesFromNS(List abcTags, ABC abc, List imports, List uses, int namespace_index, String ignorePackage, String name) { + private boolean parseUsagesFromNS(List abcTags, ABC abc, List imports, List uses, int namespace_index, String ignorePackage, String name) { Namespace ns = abc.constants.constant_namespace[namespace_index]; if (name.equals("")) { name = "*"; } String newimport = ns.getName(abc.constants); - if (ns.kind == Namespace.KIND_NAMESPACE) { + /*if (ns.kind == Namespace.KIND_NAMESPACE)*/ { String oldimport = newimport; newimport = null; for (DoABCTag abcTag : abcTags) { String newname = abcTag.abc.nsValueToName(oldimport); if (newname.equals("-")) { - return; + return true; } if (!newname.equals("")) { newimport = newname; @@ -71,7 +85,7 @@ public class TraitClass extends Trait { if (newimport != null) { if (!imports.contains(newimport)) { if (newimport.contains(":")) { - return; + return true; } String pkg = ""; if (newimport.contains(".")) { @@ -88,9 +102,21 @@ public class TraitClass extends Trait { uses.add(usname); } } + return true; } + } + return false; + } + + private void parseImportsUsagesFromNS(List abcTags, ABC abc, List imports, List uses, int namespace_index, String ignorePackage, String name) { + Namespace ns = abc.constants.constant_namespace[namespace_index]; + if (name.equals("")) { + name = "*"; + } + String newimport = ns.getName(abc.constants); + if (parseUsagesFromNS(abcTags, abc, imports, uses, namespace_index, ignorePackage, name)) { return; - } else if (ns.kind != Namespace.KIND_PACKAGE) { + } else if ((ns.kind != Namespace.KIND_PACKAGE) && (ns.kind != Namespace.KIND_PACKAGE_INTERNAL)) { return; } if (newimport.equals("-")) { @@ -110,6 +136,33 @@ public class TraitClass extends Trait { //} } + private void parseUsagesFromMultiname(List abcTags, ABC abc, List imports, List uses, Multiname m, String ignorePackage, List fullyQualifiedNames) { + if (m != null) { + if (m.kind == Multiname.TYPENAME) { + if (m.qname_index != 0) { + parseUsagesFromMultiname(abcTags, abc, imports, uses, abc.constants.constant_multiname[m.qname_index], ignorePackage, fullyQualifiedNames); + } + for (Integer i : m.params) { + if (i != 0) { + parseUsagesFromMultiname(abcTags, abc, imports, uses, abc.constants.constant_multiname[i], ignorePackage, fullyQualifiedNames); + } + } + return; + } + Namespace ns = m.getNamespace(abc.constants); + String name = m.getName(abc.constants, fullyQualifiedNames); + NamespaceSet nss = m.getNamespaceSet(abc.constants); + if (ns != null) { + parseUsagesFromNS(abcTags, abc, imports, uses, m.namespace_index, ignorePackage, name); + } + if (nss != null) { + if (nss.namespaces.length == 1) { + parseUsagesFromNS(abcTags, abc, imports, uses, nss.namespaces[0], ignorePackage, name); + } + } + } + } + private void parseImportsUsagesFromMultiname(List abcTags, ABC abc, List imports, List uses, Multiname m, String ignorePackage, List fullyQualifiedNames) { if (m != null) { if (m.kind == Multiname.TYPENAME) { @@ -130,8 +183,8 @@ public class TraitClass extends Trait { parseImportsUsagesFromNS(abcTags, abc, imports, uses, m.namespace_index, ignorePackage, name); } if (nss != null) { - for (int ni : nss.namespaces) { - parseImportsUsagesFromNS(abcTags, abc, imports, uses, ni, ignorePackage, name); + if (nss.namespaces.length == 1) { + parseImportsUsagesFromNS(abcTags, abc, imports, uses, nss.namespaces[0], ignorePackage, name); } } } @@ -148,6 +201,7 @@ public class TraitClass extends Trait { } MethodBody body = abc.findBody(method_index); if (body != null) { + parseImportsUsagesFromTraits(abcTags, abc, body.traits, imports, uses, ignorePackage, fullyQualifiedNames); for (ABCException ex : body.exceptions) { parseImportsUsagesFromMultiname(abcTags, abc, imports, uses, abc.constants.constant_multiname[ex.type_index], ignorePackage, fullyQualifiedNames); } @@ -155,16 +209,33 @@ public class TraitClass extends Trait { if (ins.definition instanceof NewFunctionIns) { parseImportsUsagesFromMethodInfo(abcTags, abc, ins.operands[0], imports, uses, ignorePackage, fullyQualifiedNames); } - for (int k = 0; k < ins.definition.operands.length; k++) { - if (ins.definition.operands[k] == AVM2Code.DAT_MULTINAME_INDEX) { - int multinameIndex = ins.operands[k]; - parseImportsUsagesFromMultiname(abcTags, abc, imports, uses, abc.constants.constant_multiname[multinameIndex], ignorePackage, fullyQualifiedNames); + if ((ins.definition instanceof FindPropertyStrictIns) + || (ins.definition instanceof FindPropertyIns) + || (ins.definition instanceof GetLexIns) + || (ins.definition instanceof CoerceIns)) { + int m = ins.operands[0]; + if (m != 0) { + parseImportsUsagesFromMultiname(abcTags, abc, imports, uses, abc.constants.constant_multiname[m], ignorePackage, fullyQualifiedNames); + } + } else { + for (int k = 0; k < ins.definition.operands.length; k++) { + + if (ins.definition.operands[k] == AVM2Code.DAT_MULTINAME_INDEX) { + int multinameIndex = ins.operands[k]; + parseUsagesFromMultiname(abcTags, abc, imports, uses, abc.constants.constant_multiname[multinameIndex], ignorePackage, fullyQualifiedNames); + } } } } } } + private void parseImportsUsagesFromTraits(List abcTags, ABC abc, Traits ts, List imports, List uses, String ignorePackage, List fullyQualifiedNames) { + for (Trait t : ts.traits) { + parseImportsUsagesFromTrait(abcTags, abc, t, imports, uses, ignorePackage, fullyQualifiedNames); + } + } + private void parseImportsUsagesFromTrait(List abcTags, ABC abc, Trait t, List imports, List uses, String ignorePackage, List fullyQualifiedNames) { if (t instanceof TraitMethodGetterSetter) { TraitMethodGetterSetter tm = (TraitMethodGetterSetter) t; @@ -197,17 +268,14 @@ public class TraitClass extends Trait { } //static - for (Trait t : abc.class_info[class_info].static_traits.traits) { - parseImportsUsagesFromTrait(abcTags, abc, t, imports, uses, packageName, fullyQualifiedNames); - } + parseImportsUsagesFromTraits(abcTags, abc, abc.class_info[class_info].static_traits, imports, uses, packageName, fullyQualifiedNames); //static initializer parseImportsUsagesFromMethodInfo(abcTags, abc, abc.class_info[class_info].cinit_index, imports, uses, packageName, fullyQualifiedNames); //instance - for (Trait t : abc.instance_info[class_info].instance_traits.traits) { - parseImportsUsagesFromTrait(abcTags, abc, t, imports, uses, packageName, fullyQualifiedNames); - } + parseImportsUsagesFromTraits(abcTags, abc, abc.instance_info[class_info].instance_traits, imports, uses, packageName, fullyQualifiedNames); + //instance initializer parseImportsUsagesFromMethodInfo(abcTags, abc, abc.instance_info[class_info].iinit_index, imports, uses, packageName, fullyQualifiedNames); @@ -248,20 +316,6 @@ public class TraitClass extends Trait { List importnames = new ArrayList(); importnames.addAll(namesInThisPackage); - /*for (String path : imports) { - String name = path; - String pkg = ""; - if (name.contains(".")) { - pkg = name.substring(0, name.lastIndexOf(".")); - name = name.substring(name.lastIndexOf(".") + 1); - } - if (importnames.contains(name)) { - fullyQualifiedNames.add(name); - } else { - importnames.add(name); - } - }*/ - List imports2 = new ArrayList(); for (String path : imports) { String name = path; String pkg = ""; @@ -269,12 +323,26 @@ public class TraitClass extends Trait { pkg = name.substring(0, name.lastIndexOf(".")); name = name.substring(name.lastIndexOf(".") + 1); } - - if ((!packageName.equals(pkg)) && (!fullyQualifiedNames.contains(name))) { - imports2.add(path); + if (importnames.contains(name) || ((!pkg.equals("")) && isBuiltInClass(name))) { + fullyQualifiedNames.add(name); + } else { + importnames.add(name); } } - imports = imports2; + /*List imports2 = new ArrayList(); + for (String path : imports) { + String name = path; + String pkg = ""; + if (name.contains(".")) { + pkg = name.substring(0, name.lastIndexOf(".")); + name = name.substring(name.lastIndexOf(".") + 1); + } + + if ((!packageName.equals(pkg)) && (!fullyQualifiedNames.contains(name))) { + imports2.add(path); + } + } + imports = imports2;*/ for (String imp : imports) { if (!imp.startsWith(".")) { diff --git a/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java b/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java index 0dd1d46a0..0942a54ef 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java +++ b/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java @@ -19,6 +19,8 @@ package com.jpexs.asdec.abc.types.traits; import com.jpexs.asdec.abc.ABC; import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.treemodel.TreeItem; +import com.jpexs.asdec.abc.types.Multiname; +import com.jpexs.asdec.abc.types.Namespace; import com.jpexs.asdec.abc.types.ValueKind; import com.jpexs.asdec.helpers.Helper; import com.jpexs.asdec.helpers.Highlighting; @@ -93,6 +95,21 @@ public class TraitSlotConst extends Trait { if (modifier.equals(" ")) { modifier = ""; } + Multiname n = getName(abc); + boolean showModifier = true; + if ((classIndex == -1) && (n != null)) { + Namespace ns = n.getNamespace(abc.constants); + if (ns == null) { + showModifier = false; + } else { + if ((ns.kind != Namespace.KIND_PACKAGE) && (ns.kind != Namespace.KIND_PACKAGE_INTERNAL)) { + showModifier = false; + } + } + } + if (!showModifier) { + modifier = ""; + } return ABC.IDENT_STRING + ABC.IDENT_STRING + modifier + getNameValueStr(abc, fullyQualifiedNames); } diff --git a/trunk/src/com/jpexs/asdec/abc/types/traits/Traits.java b/trunk/src/com/jpexs/asdec/abc/types/traits/Traits.java index 091b66700..94c06e57c 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/traits/Traits.java +++ b/trunk/src/com/jpexs/asdec/abc/types/traits/Traits.java @@ -68,7 +68,7 @@ public class Traits { } } if (traits[t] instanceof TraitClass) { - plus = Highlighting.hilighClass(plus, ((TraitClass)traits[t]).class_info); + plus = Highlighting.hilighClass(plus, ((TraitClass) traits[t]).class_info); } else { plus = Highlighting.hilighTrait(plus, h); } diff --git a/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java b/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java index b91f0fcb3..35120c232 100644 --- a/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java +++ b/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java @@ -24,7 +24,6 @@ import java.awt.event.WindowEvent; import java.awt.image.ImageObserver; import javax.swing.JFrame; import javax.swing.JLabel; -import javax.swing.JPanel; import javax.swing.SwingConstants; /** @@ -36,11 +35,12 @@ public class LoadingDialog extends JFrame implements ImageObserver { private JLabel loadingLabel = new JLabel(""); private LoadingPanel loadingPanel; - String load="Loading, please wait..."; - - public void setDetail(String d){ - loadingLabel.setText("
"+load+"
"+d+"
"); + String load = "Loading, please wait..."; + + public void setDetail(String d) { + loadingLabel.setText("
" + load + "
" + d + "
"); } + /** * Constructor */