From 76eff8b53c4498cd1064bf373eeb83ac17c507a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 19 Feb 2023 20:47:57 +0100 Subject: [PATCH] Fixed #1977 AS3 Find usages - class and function usages, various fixes --- CHANGELOG.md | 2 + .../com/jpexs/decompiler/flash/abc/ABC.java | 88 ++++++++++++------ .../flash/abc/types/InstanceInfo.java | 4 +- .../flash/abc/types/ScriptInfo.java | 23 +++++ .../abc/usages/ClassNameMultinameUsage.java | 10 +- .../InsideClassMultinameUsageInterface.java | 2 + ...age.java => SuperClassMultinameUsage.java} | 18 +++- ...java => SuperInterfaceMultinameUsage.java} | 18 +++- .../flash/abc/usages/TraitMultinameUsage.java | 10 +- .../testdata/as3_new/bin/as3_new.air.swf | Bin 25366 -> 26236 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 33235 -> 34470 bytes libsrc/ffdec_lib/testdata/as3_new/src/Main.as | 3 + .../as3_new/src/tests_uses/TestClass.as | 20 ++++ .../as3_new/src/tests_uses/TestClass2.as | 10 ++ .../as3_new/src/tests_uses/TestInterface.as | 8 ++ .../as3_new/src/tests_uses/TestOtherClass.as | 37 ++++++++ .../as3_new/src/tests_uses/TestParentClass.as | 12 +++ .../src/tests_uses/TestParentInterface.as | 8 ++ .../decompiler/flash/gui/abc/ABCPanel.java | 6 +- .../flash/gui/abc/DecompiledEditorPane.java | 22 ++++- .../decompiler/flash/gui/abc/UsageFrame.java | 31 ++++-- 21 files changed, 281 insertions(+), 51 deletions(-) rename libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/{ImplementsMultinameUsage.java => SuperClassMultinameUsage.java} (74%) rename libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/{ExtendsMultinameUsage.java => SuperInterfaceMultinameUsage.java} (69%) create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests_uses/TestClass.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests_uses/TestClass2.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests_uses/TestInterface.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests_uses/TestOtherClass.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests_uses/TestParentClass.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests_uses/TestParentInterface.as diff --git a/CHANGELOG.md b/CHANGELOG.md index 52c18c496..ab5873537 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file. - FLA export - XML formatting with blank lines on Java9+ - [#1974] DefineBits image reading problem - [#1963] AS2 properly decompile/direct edit long classes +- [#1977] AS3 Find usages - class and function usages, various fixes ## [18.3.5] - 2023-02-12 ### Added @@ -2965,6 +2966,7 @@ All notable changes to this project will be documented in this file. [#1973]: https://www.free-decompiler.com/flash/issues/1973 [#1974]: https://www.free-decompiler.com/flash/issues/1974 [#1963]: https://www.free-decompiler.com/flash/issues/1963 +[#1977]: https://www.free-decompiler.com/flash/issues/1977 [#1959]: https://www.free-decompiler.com/flash/issues/1959 [#1960]: https://www.free-decompiler.com/flash/issues/1960 [#1964]: https://www.free-decompiler.com/flash/issues/1964 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java index 3289790a8..b8411302a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java @@ -49,8 +49,8 @@ import com.jpexs.decompiler.flash.abc.usages.ClassNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.ConstVarNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.ConstVarTypeMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.DefinitionUsage; -import com.jpexs.decompiler.flash.abc.usages.ExtendsMultinameUsage; -import com.jpexs.decompiler.flash.abc.usages.ImplementsMultinameUsage; +import com.jpexs.decompiler.flash.abc.usages.SuperClassMultinameUsage; +import com.jpexs.decompiler.flash.abc.usages.SuperInterfaceMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MethodBodyMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MethodNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MethodParamsMultinameUsage; @@ -1146,21 +1146,21 @@ public class ABC implements Openable { } } - private void checkMultinameUsedInMethod(int multinameIndex, int methodInfo, List ret, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { + private void checkMultinameUsedInMethod(int multinameIndex, boolean exactMatch, int methodInfo, List ret, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { for (int p = 0; p < method_info.get(methodInfo).param_types.length; p++) { - if (method_info.get(methodInfo).param_types[p] == multinameIndex) { + if (isSameName(multinameIndex, method_info.get(methodInfo).param_types[p], exactMatch)) { ret.add(new MethodParamsMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); break; } } - if (method_info.get(methodInfo).ret_type == multinameIndex) { + if (isSameName(multinameIndex, method_info.get(methodInfo).ret_type, exactMatch)) { ret.add(new MethodReturnTypeMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); } MethodBody body = findBody(methodInfo); if (body != null) { - findMultinameUsageInTraits(body.traits, multinameIndex, traitsType, scriptIndex, classIndex, ret, traitIndex); + findMultinameUsageInTraits(body.traits, multinameIndex, exactMatch, traitsType, scriptIndex, classIndex, ret, traitIndex); for (ABCException e : body.exceptions) { - if ((e.name_index == multinameIndex) || (e.type_index == multinameIndex)) { + if ((isSameName(multinameIndex, e.name_index, exactMatch)) || (isSameName(multinameIndex, e.type_index, exactMatch))) { ret.add(new MethodBodyMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); return; } @@ -1168,7 +1168,7 @@ public class ABC implements Openable { for (AVM2Instruction ins : body.getCode().code) { for (int o = 0; o < ins.definition.operands.length; o++) { if (ins.definition.operands[o] == AVM2Code.DAT_MULTINAME_INDEX) { - if (ins.operands[o] == multinameIndex) { + if (isSameName(multinameIndex, ins.operands[o], exactMatch)) { ret.add(new MethodBodyMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); return; } @@ -1218,43 +1218,73 @@ public class ABC implements Openable { } } } + + private boolean isSameName(int expectedQNameIndex, int checkedNameIndex, boolean exactMatch) { + if (expectedQNameIndex == checkedNameIndex) { + return true; + } + if (exactMatch) { + return false; + } + Multiname expectedQName = constants.getMultiname(expectedQNameIndex); + Multiname checkedName = constants.getMultiname(checkedNameIndex); + if (checkedName == null) { + return false; + } + + if (expectedQName.name_index != checkedName.name_index) { + return false; + } + if (checkedName.kind == Multiname.QNAME) { + return expectedQName.namespace_index == checkedName.namespace_index; + } + if (checkedName.kind != Multiname.MULTINAME) { + return false; + } + for (int ns:constants.getNamespaceSet(checkedName.namespace_set_index).namespaces) { + if (ns == expectedQName.namespace_index) { + return true; + } + } + return false; + } - private void findMultinameUsageInTraits(Traits traits, int multinameIndex, int traitsType, int scriptIndex, int classIndex, List ret, int parentTraitIndex) { + private void findMultinameUsageInTraits(Traits traits, int multinameIndex, boolean exactMatch, int traitsType, int scriptIndex, int classIndex, List ret, int parentTraitIndex) { for (int t = 0; t < traits.traits.size(); t++) { if (traits.traits.get(t) instanceof TraitClass) { TraitClass tc = (TraitClass) traits.traits.get(t); - if (tc.name_index == multinameIndex) { + if (isSameName(multinameIndex, tc.name_index, exactMatch)) { ret.add(new ClassNameMultinameUsage(this, multinameIndex, tc.class_info, scriptIndex)); } int c = tc.class_info; - if (instance_info.get(c).super_index == multinameIndex) { - ret.add(new ExtendsMultinameUsage(this, multinameIndex, c, scriptIndex)); + if (isSameName(multinameIndex, instance_info.get(c).super_index, exactMatch)) { + ret.add(new SuperClassMultinameUsage(this, multinameIndex, c, scriptIndex)); } for (int i = 0; i < instance_info.get(c).interfaces.length; i++) { - if (instance_info.get(c).interfaces[i] == multinameIndex) { - ret.add(new ImplementsMultinameUsage(this, multinameIndex, c, scriptIndex)); + if (isSameName(multinameIndex, instance_info.get(c).interfaces[i], exactMatch)) { + ret.add(new SuperInterfaceMultinameUsage(this, multinameIndex, c, scriptIndex)); } } - checkMultinameUsedInMethod(multinameIndex, instance_info.get(c).iinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, true, null, -1); - checkMultinameUsedInMethod(multinameIndex, class_info.get(c).cinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_CLASS, true, null, -1); - findMultinameUsageInTraits(instance_info.get(c).instance_traits, multinameIndex, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, -1/*FIXME*/, c, ret, -1); - findMultinameUsageInTraits(class_info.get(c).static_traits, multinameIndex, TraitMultinameUsage.TRAITS_TYPE_CLASS, -1/*FIXME*/, c, ret, -1); + checkMultinameUsedInMethod(multinameIndex, exactMatch, instance_info.get(c).iinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, true, null, -1); + checkMultinameUsedInMethod(multinameIndex, exactMatch, class_info.get(c).cinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_CLASS, true, null, -1); + findMultinameUsageInTraits(instance_info.get(c).instance_traits, multinameIndex, exactMatch, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, -1/*FIXME*/, c, ret, -1); + findMultinameUsageInTraits(class_info.get(c).static_traits, multinameIndex, exactMatch, TraitMultinameUsage.TRAITS_TYPE_CLASS, -1/*FIXME*/, c, ret, -1); } if (traits.traits.get(t) instanceof TraitSlotConst) { TraitSlotConst tsc = (TraitSlotConst) traits.traits.get(t); - if (tsc.name_index == multinameIndex) { + if (isSameName(multinameIndex, tsc.name_index, exactMatch)) { ret.add(new ConstVarNameMultinameUsage(this, multinameIndex, scriptIndex, classIndex, t, traitsType, traits, parentTraitIndex)); } - if (tsc.type_index == multinameIndex) { + if (isSameName(multinameIndex, tsc.type_index, exactMatch)) { ret.add(new ConstVarTypeMultinameUsage(this, multinameIndex, scriptIndex, classIndex, t, traitsType, traits, parentTraitIndex)); } } if (traits.traits.get(t) instanceof TraitMethodGetterSetter) { TraitMethodGetterSetter tmgs = (TraitMethodGetterSetter) traits.traits.get(t); - if (tmgs.name_index == multinameIndex) { + if (isSameName(multinameIndex, tmgs.name_index, exactMatch)) { ret.add(new MethodNameMultinameUsage(this, multinameIndex, scriptIndex, classIndex, t, traitsType, false, traits, parentTraitIndex)); } - checkMultinameUsedInMethod(multinameIndex, tmgs.method_info, ret, scriptIndex, classIndex, t, traitsType, false, traits, parentTraitIndex); + checkMultinameUsedInMethod(multinameIndex, exactMatch, tmgs.method_info, ret, scriptIndex, classIndex, t, traitsType, false, traits, parentTraitIndex); } } } @@ -1270,10 +1300,10 @@ public class ABC implements Openable { int classNameMultinameIndex = instance_info.get(c).name_index; ret.get(classNameMultinameIndex).add(new ClassNameMultinameUsage(this, classNameMultinameIndex, c, scriptIndex)); int extendsMultinameIndex = instance_info.get(c).super_index; - ret.get(extendsMultinameIndex).add(new ExtendsMultinameUsage(this, extendsMultinameIndex, c, scriptIndex)); + ret.get(extendsMultinameIndex).add(new SuperClassMultinameUsage(this, extendsMultinameIndex, c, scriptIndex)); for (int i = 0; i < instance_info.get(c).interfaces.length; i++) { int implementsMultinameIndex = instance_info.get(c).interfaces[i]; - ret.get(implementsMultinameIndex).add(new ImplementsMultinameUsage(this, implementsMultinameIndex, c, scriptIndex)); + ret.get(implementsMultinameIndex).add(new SuperInterfaceMultinameUsage(this, implementsMultinameIndex, c, scriptIndex)); } checkAllMultinameUsedInMethod(instance_info.get(c).iinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, true, null, -1); checkAllMultinameUsedInMethod(class_info.get(c).cinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_CLASS, true, null, -1); @@ -1294,7 +1324,7 @@ public class ABC implements Openable { } public List findMultinameDefinition(int multinameIndex) { - List usages = findMultinameUsage(multinameIndex); + List usages = findMultinameUsage(multinameIndex, false); List ret = new ArrayList<>(); for (MultinameUsage u : usages) { if (u instanceof DefinitionUsage) { @@ -1308,7 +1338,7 @@ public class ABC implements Openable { List ret = new ArrayList<>(); for (int multinameIndex = 1; multinameIndex < constants.getMultinameCount(); multinameIndex++) { if (constants.getMultiname(multinameIndex).namespace_index == namespaceIndex) { - ret.addAll(findMultinameUsage(multinameIndex)); + ret.addAll(findMultinameUsage(multinameIndex, false)); } } return ret; @@ -1386,13 +1416,14 @@ public class ABC implements Openable { } } - public List findMultinameUsage(int multinameIndex) { + public List findMultinameUsage(int multinameIndex, boolean exactMatch) { List ret = new ArrayList<>(); if (multinameIndex == 0) { return ret; } for (int s = 0; s < script_info.size(); s++) { - findMultinameUsageInTraits(script_info.get(s).traits, multinameIndex, TraitMultinameUsage.TRAITS_TYPE_SCRIPT, s, -1, ret, -1); + checkMultinameUsedInMethod(multinameIndex, exactMatch, script_info.get(s).init_index, ret, s, -1, 0, TraitMultinameUsage.TRAITS_TYPE_SCRIPT, true, null, -1); + findMultinameUsageInTraits(script_info.get(s).traits, multinameIndex, exactMatch, TraitMultinameUsage.TRAITS_TYPE_SCRIPT, s, -1, ret, -1); } loopm: for (int t = 1; t < constants.getMultinameCount(); t++) { @@ -1420,6 +1451,7 @@ public class ABC implements Openable { } for (int s = 0; s < script_info.size(); s++) { + checkAllMultinameUsedInMethod(script_info.get(s).init_index, ret, s, -1, 0, TraitMultinameUsage.TRAITS_TYPE_SCRIPT, true, null, -1); findAllMultinameUsageInTraits(script_info.get(s).traits, TraitMultinameUsage.TRAITS_TYPE_SCRIPT, s, -1, ret, -1); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java index de5dc791b..67d91c9a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java @@ -103,7 +103,9 @@ public class InstanceInfo { } writer.appendNoHilight(modifiers + objType); - writer.hilightSpecial(abc.constants.getMultiname(name_index).getName(abc.constants, null/* No full names here*/, false, true), HighlightSpecialType.CLASS_NAME); + String classTypeName = abc.constants.getMultiname(name_index).getNameWithNamespace(abc.constants, true).toRawString(); + + writer.hilightSpecial(abc.constants.getMultiname(name_index).getName(abc.constants, null/* No full names here*/, false, true), HighlightSpecialType.CLASS_NAME, classTypeName); if (super_index > 0) { String typeName = abc.constants.getMultiname(super_index).getNameWithNamespace(abc.constants, true).toRawString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java index 891ef9239..848f1082e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java @@ -63,6 +63,29 @@ public class ScriptInfo { public void clearPacksCache() { cachedPacks = null; } + + /** + * + * @param abc + * @return Simple pack name - Can be null! + */ + public DottedChain getSimplePackName(ABC abc) { + List packageTraits = new ArrayList<>(); + + for (int j = 0; j < traits.traits.size(); j++) { + Trait t = traits.traits.get(j); + Multiname name = t.getName(abc); + Namespace ns = name.getNamespace(abc.constants); + if ((ns.kind == Namespace.KIND_PACKAGE_INTERNAL) + || (ns.kind == Namespace.KIND_PACKAGE)) { + packageTraits.add(j); + } + } + if (packageTraits.isEmpty() || packageTraits.size() > 1) { + return null; + } + return traits.traits.get(packageTraits.get(0)).getName(abc).getNameWithNamespace(abc.constants, true); + } public List getPacks(ABC abc, int scriptIndex, String packagePrefix, List allAbcs) { if (packagePrefix == null && cachedPacks != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java index e47108807..389a06213 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.InstanceInfo; /** * @@ -38,7 +39,9 @@ public class ClassNameMultinameUsage extends MultinameUsage implements Definitio @Override public String toString() { - return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants, true).toPrintableString(true) + " trait name"; + InstanceInfo ii = abc.instance_info.get(classIndex); + String kind = ii.isInterface() ? "interface" : "class"; + return kind + " " + ii.getName(abc.constants).getNameWithNamespace(abc.constants, true).toPrintableString(true) + " name"; } @Override @@ -81,4 +84,9 @@ public class ClassNameMultinameUsage extends MultinameUsage implements Definitio } return false; } + + @Override + public int getScriptIndex() { + return scriptIndex; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java index 7deee0011..5a9b313c8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java @@ -24,6 +24,8 @@ import com.jpexs.decompiler.flash.abc.ABC; */ public interface InsideClassMultinameUsageInterface { + public int getScriptIndex(); + public int getClassIndex(); public ABC getAbc(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/SuperClassMultinameUsage.java similarity index 74% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/SuperClassMultinameUsage.java index 2dfd2c5d9..70b9f6cf9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/SuperClassMultinameUsage.java @@ -17,16 +17,17 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.InstanceInfo; /** * * @author JPEXS */ -public class ImplementsMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { +public class SuperClassMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { private final int classIndex; - public ImplementsMultinameUsage(ABC abc, int multinameIndex, int classIndex, int scriptIndex) { + public SuperClassMultinameUsage(ABC abc, int multinameIndex, int classIndex, int scriptIndex) { super(abc, multinameIndex, scriptIndex); this.classIndex = classIndex; } @@ -38,13 +39,15 @@ public class ImplementsMultinameUsage extends MultinameUsage implements InsideCl @Override public String toString() { - return super.toString() + " implements"; + InstanceInfo ii = abc.instance_info.get(classIndex); + String kind = ii.isInterface() ? "interface" : "class"; + return kind + " " + ii.getName(abc.constants).getNameWithNamespace(abc.constants, true) + " extends"; } @Override public int hashCode() { int hash = super.hashCode(); - hash = 59 * hash + this.classIndex; + hash = 17 * hash + this.classIndex; return hash; } @@ -62,7 +65,7 @@ public class ImplementsMultinameUsage extends MultinameUsage implements InsideCl if (!super.equals(obj)) { return false; } - final ImplementsMultinameUsage other = (ImplementsMultinameUsage) obj; + final SuperClassMultinameUsage other = (SuperClassMultinameUsage) obj; if (this.classIndex != other.classIndex) { return false; } @@ -73,4 +76,9 @@ public class ImplementsMultinameUsage extends MultinameUsage implements InsideCl public boolean collides(MultinameUsage other) { return false; } + + @Override + public int getScriptIndex() { + return scriptIndex; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/SuperInterfaceMultinameUsage.java similarity index 69% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/SuperInterfaceMultinameUsage.java index 06c11b490..9a515d0d9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/SuperInterfaceMultinameUsage.java @@ -17,16 +17,17 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.InstanceInfo; /** * * @author JPEXS */ -public class ExtendsMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { +public class SuperInterfaceMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { private final int classIndex; - public ExtendsMultinameUsage(ABC abc, int multinameIndex, int classIndex, int scriptIndex) { + public SuperInterfaceMultinameUsage(ABC abc, int multinameIndex, int classIndex, int scriptIndex) { super(abc, multinameIndex, scriptIndex); this.classIndex = classIndex; } @@ -38,13 +39,15 @@ public class ExtendsMultinameUsage extends MultinameUsage implements InsideClass @Override public String toString() { - return super.toString() + " extends"; + InstanceInfo ii = abc.instance_info.get(classIndex); + String kind = ii.isInterface() ? "interface" : "class"; + return kind + " " + ii.getName(abc.constants).getNameWithNamespace(abc.constants, true) + " " + (ii.isInterface() ? "extends" : "implements"); } @Override public int hashCode() { int hash = super.hashCode(); - hash = 17 * hash + this.classIndex; + hash = 59 * hash + this.classIndex; return hash; } @@ -62,7 +65,7 @@ public class ExtendsMultinameUsage extends MultinameUsage implements InsideClass if (!super.equals(obj)) { return false; } - final ExtendsMultinameUsage other = (ExtendsMultinameUsage) obj; + final SuperInterfaceMultinameUsage other = (SuperInterfaceMultinameUsage) obj; if (this.classIndex != other.classIndex) { return false; } @@ -73,4 +76,9 @@ public class ExtendsMultinameUsage extends MultinameUsage implements InsideClass public boolean collides(MultinameUsage other) { return false; } + + @Override + public int getScriptIndex() { + return scriptIndex; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java index d43f06980..72e418df1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java @@ -17,7 +17,9 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.InstanceInfo; import com.jpexs.decompiler.flash.abc.types.traits.Traits; +import com.jpexs.decompiler.graph.DottedChain; import java.util.Objects; /** @@ -56,7 +58,13 @@ public abstract class TraitMultinameUsage extends MultinameUsage implements Insi @Override public String toString() { - return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants, true).toPrintableString(true); + if (classIndex != -1) { + InstanceInfo ii = abc.instance_info.get(classIndex); + String kind = ii.isInterface() ? "interface" : "class"; + return kind + " " + ii.getName(abc.constants).getNameWithNamespace(abc.constants, true).toPrintableString(true); + } + DottedChain scriptSimpleName = abc.script_info.get(scriptIndex).getSimplePackName(abc); + return "script " + (scriptSimpleName == null ? "" + scriptIndex:scriptSimpleName.toPrintableString(true)); } @Override diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index d578e4ee247d5a90d6ed397431733f3b19f7f69f..3b0ad99337709463f526bfbe4e3930490d2caf92 100644 GIT binary patch literal 26236 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

4XRjJ{q0#au9jU*uB&cH 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 F@jo3|K&Su! diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index 9e90328ea91d2851c6971be7807a4a71ad3028d2..07e29c542a7965e67f2ae3ac1d5b9cc2b72982d9 100644 GIT binary patch delta 32773 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 delta 31443 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 yjF_$Zv8gX1-&Ua=lH0%NgX usedAbc = new Reference<>(null); int multinameIndex = decompiledTextArea.getMultinameUnderCaret(usedAbc); if (multinameIndex > -1) { - UsageFrame usageFrame = new UsageFrame(usedAbc.getVal(), multinameIndex, ABCPanel.this, false); + UsageFrame usageFrame = new UsageFrame(usedAbc.getVal(), multinameIndex, false, ABCPanel.this, false); usageFrame.setVisible(true); } } @@ -1166,7 +1166,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener 0) { - UsageFrame usageFrame = new UsageFrame(abc, multinameIndex, t, false); + UsageFrame usageFrame = new UsageFrame(abc, multinameIndex, true, t, false); usageFrame.setVisible(true); } } @@ -1297,7 +1297,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener 1) { - UsageFrame usageFrame = new UsageFrame(usedAbc, multinameIndex, ABCPanel.this, true); + UsageFrame usageFrame = new UsageFrame(usedAbc, multinameIndex, false, ABCPanel.this, true); usageFrame.setVisible(true); return; } else if (!usages.isEmpty()) { //one diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java index 4510f65be..748f55327 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java @@ -576,6 +576,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL Highlighting sh = Highlighting.searchPos(highlightedText.getSpecialHighlights(), pos); if (sh != null) { switch (sh.getProperties().subtype) { + case CLASS_NAME: case TYPE_NAME: String typeName = sh.getProperties().specialValue; for (int i = 1; i < abc.constants.getMultinameCount(); i++) { @@ -594,7 +595,8 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL break; case TRAIT_NAME: if (currentTrait != null) { - //return currentTrait.name_index; + //TODO: this should be handled better = to match method usages on the same class, not all matching classes. But that requires decompiling target usages. + return currentTrait.name_index; } break; case RETURNS: @@ -735,6 +737,24 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL } } + /** + * WARNING: This won't change script. This only hilights class in current script + */ + public void gotoClassHeader() { + Highlighting tc = Highlighting.searchIndex(highlightedText.getClassHighlights(), classIndex); + if (tc != null) { + final int fpos = tc.startPos; + new Timer().schedule(new TimerTask() { + @Override + public void run() { + if (fpos <= getDocument().getLength()) { + setCaretPosition(fpos); + } + } + }, 100); + } + } + public void gotoTrait(int traitId) { boolean isScriptInit = traitId == GraphTextWriter.TRAIT_SCRIPT_INITIALIZER; diff --git a/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java b/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java index 34c4fb3b4..d63a10912 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.abc.types.Namespace; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; import com.jpexs.decompiler.flash.abc.usages.InsideClassMultinameUsageInterface; import com.jpexs.decompiler.flash.abc.usages.MethodMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MultinameUsage; @@ -55,10 +56,18 @@ public class UsageFrame extends AppDialog implements MouseListener { private final ABCPanel abcPanel; - public UsageFrame(ABC abc, int multinameIndex, ABCPanel abcPanel, boolean definitions) { + /** + * + * @param abc + * @param multinameIndex + * @param exactMatch False = also consider Multiname.MULTINAME kind equal to QNAME with same name+namespace in the list. This is used in some of "extends/implements" cause. + * @param abcPanel + * @param definitions + */ + public UsageFrame(ABC abc, int multinameIndex, boolean exactMatch, ABCPanel abcPanel, boolean definitions) { super(abcPanel.getMainPanel().getMainFrame().getWindow()); - this.abcPanel = abcPanel; - List usages = definitions ? abc.findMultinameDefinition(multinameIndex) : abc.findMultinameUsage(multinameIndex); + this.abcPanel = abcPanel; + List usages = definitions ? abc.findMultinameDefinition(multinameIndex) : abc.findMultinameUsage(multinameIndex, exactMatch); Multiname m = abc.constants.getMultiname(multinameIndex); if (m.namespace_index > 0 && abc.constants.getNamespace(m.namespace_index).kind != Namespace.KIND_PRIVATE) { for (ABCContainerTag at : abc.getAbcTags()) { @@ -68,7 +77,7 @@ public class UsageFrame extends AppDialog implements MouseListener { } List mids = a.constants.getMultinameIds(m, abc.constants); for (int mid : mids) { - usages.addAll(definitions ? a.findMultinameDefinition(mid) : a.findMultinameUsage(mid)); + usages.addAll(definitions ? a.findMultinameDefinition(mid) : a.findMultinameUsage(mid, exactMatch)); } } } @@ -126,10 +135,12 @@ public class UsageFrame extends AppDialog implements MouseListener { if (tmu instanceof MethodMultinameUsage) { MethodMultinameUsage mmu = (MethodMultinameUsage) usage; if (mmu.isInitializer() == true) { - traitIndex = newAbc.class_info.get(mmu.getClassIndex()).static_traits.traits.size() + newAbc.instance_info.get(mmu.getClassIndex()).instance_traits.traits.size() + (mmu.getTraitsType() == TraitMultinameUsage.TRAITS_TYPE_CLASS ? 1 : 0); + traitIndex = mmu.getAbc().getGlobalTraitId(mmu.getClassIndex() == -1 ? TraitType.SCRIPT_INITIALIZER : TraitType.INITIALIZER, mmu.getTraitsType() == TraitMultinameUsage.TRAITS_TYPE_CLASS, -1, -1); } } decompiledTextArea.gotoTrait(traitIndex); + } else { + decompiledTextArea.gotoClassHeader(); } } }; @@ -138,7 +149,15 @@ public class UsageFrame extends AppDialog implements MouseListener { setTrait.run(); } else { decompiledTextArea.addScriptListener(setTrait); - abcPanel.hilightScript(abcPanel.getOpenable(), icu.getAbc().instance_info.get(icu.getClassIndex()).getName(icu.getAbc().constants).getNameWithNamespace(icu.getAbc().constants, true).toRawString()); + String scriptName; + if (icu.getClassIndex() > -1) { + scriptName = icu.getAbc().instance_info.get(icu.getClassIndex()).getName(icu.getAbc().constants).getNameWithNamespace(icu.getAbc().constants, true).toRawString(); + } else if (icu.getScriptIndex() > -1) { + scriptName = icu.getAbc().script_info.get(icu.getScriptIndex()).getSimplePackName(icu.getAbc()).toRawString(); + } else { + scriptName = ""; + } + abcPanel.hilightScript(abcPanel.getOpenable(), scriptName); } } }