diff --git a/CHANGELOG.md b/CHANGELOG.md index 700ff5b60..e3238dfd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ All notable changes to this project will be documented in this file. - [#2131] UseOutline flag for DefineEditText - Wordrapping long words in DefineEditText - [#2133] Linux/Mac - ffdec.sh not correctly parsing java build number on javas without it +- [#2135] FLA Export - framescripts handling when addFrameScript uses Multinames instead of QNames ### Changed - [#2120] Exported assets no longer take names from assigned classes if there is more than 1 assigned class @@ -3331,6 +3332,7 @@ Major version of SWF to XML export changed to 2. [#2078]: https://www.free-decompiler.com/flash/issues/2078 [#2053]: https://www.free-decompiler.com/flash/issues/2053 [#2133]: https://www.free-decompiler.com/flash/issues/2133 +[#2135]: https://www.free-decompiler.com/flash/issues/2135 [#2120]: https://www.free-decompiler.com/flash/issues/2120 [#1130]: https://www.free-decompiler.com/flash/issues/1130 [#1220]: https://www.free-decompiler.com/flash/issues/1220 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 7da02d68c..5e26e6e0b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -64,7 +64,7 @@ public class TraitClass extends Trait implements TraitWithSlot { private boolean classInitializerIsEmpty; - private List frameTraitNames = new ArrayList<>(); + private List frameTraitNames = new ArrayList<>(); @Override public void delete(ABC abc, boolean d) { @@ -338,14 +338,14 @@ public class TraitClass extends Trait implements TraitWithSlot { if (callProp.arguments.get(i) instanceof IntegerValueAVM2Item) { if (callProp.arguments.get(i + 1) instanceof GetLexAVM2Item) { GetLexAVM2Item lex = (GetLexAVM2Item) callProp.arguments.get(i + 1); - frameTraitNames.add(abc.constants.getMultinameId(lex.propertyName, false)); + frameTraitNames.add(lex.propertyName.getName(abc.constants, new ArrayList<>(), false, true)); } else if (callProp.arguments.get(i + 1) instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) callProp.arguments.get(i + 1); if (getProp.object instanceof ThisAVM2Item) { if (getProp.propertyName instanceof FullMultinameAVM2Item) { FullMultinameAVM2Item framePropName = (FullMultinameAVM2Item) getProp.propertyName; int multinameIndex = framePropName.multinameIndex; - frameTraitNames.add(multinameIndex); + frameTraitNames.add(abc.constants.getMultiname(multinameIndex).getName(abc.constants, new ArrayList<>(), false, true)); } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index 073a45f5e..e7bb788bb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -167,7 +167,7 @@ public class Traits implements Cloneable, Serializable { } } - public GraphTextWriter toString(AbcIndexing abcIndex, Class[] traitTypes, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, List ignoredTraitNames, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(AbcIndexing abcIndex, Class[] traitTypes, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, List ignoredTraitNames, boolean insideInterface) throws InterruptedException { List ordered = new ArrayList<>(traits); loopi: @@ -227,7 +227,7 @@ public class Traits implements Cloneable, Serializable { if (!trait.isVisible(isStatic, abc)) { continue; } - if (ignoredTraitNames.contains(trait.name_index)) { + if (ignoredTraitNames.contains(trait.getName(abc).getName(abc.constants, new ArrayList<>(), false, false))) { continue; } writer.newLine(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 874311db4..6fd0f15ee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -2916,7 +2916,7 @@ public class XFLConverter { callStack.add(constructorBody); constructorBody.convert(callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, constructorMethodIndex, pack.scriptIndex, classIndex, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); - Map frameToTraitMultiname = new HashMap<>(); + Map frameToTraitName = new HashMap<>(); //find all addFrameScript(xx,this.method) in constructor /* @@ -2946,14 +2946,14 @@ public class XFLConverter { int frame = frameItem.intValue(); if (callProp.arguments.get(i + 1) instanceof GetLexAVM2Item) { GetLexAVM2Item lex = (GetLexAVM2Item) callProp.arguments.get(i + 1); - frameToTraitMultiname.put(frame, lex.propertyName); + frameToTraitName.put(frame, lex.propertyName.getName(abc.constants, new ArrayList<>(), true, false)); } else if (callProp.arguments.get(i + 1) instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) callProp.arguments.get(i + 1); if (getProp.object instanceof ThisAVM2Item) { if (getProp.propertyName instanceof FullMultinameAVM2Item) { FullMultinameAVM2Item framePropName = (FullMultinameAVM2Item) getProp.propertyName; int multinameIndex = framePropName.multinameIndex; - frameToTraitMultiname.put(frame, abc.constants.getMultiname(multinameIndex)); + frameToTraitName.put(frame, abc.constants.getMultiname(multinameIndex).getName(abc.constants, new ArrayList<>(), true, false)); } } } @@ -2964,18 +2964,18 @@ public class XFLConverter { } } } - Map multinameToMethodTrait = new HashMap<>(); + Map multinameToMethodTrait = new HashMap<>(); for (Trait trait : instanceInfo.instance_traits.traits) { if (trait instanceof TraitMethodGetterSetter) { Multiname m = abc.constants.getMultiname(trait.name_index); - multinameToMethodTrait.put(abc.constants.getMultiname(trait.name_index), (TraitMethodGetterSetter) trait); + multinameToMethodTrait.put(abc.constants.getMultiname(trait.name_index).getName(abc.constants, new ArrayList<>(), true, false), (TraitMethodGetterSetter) trait); } } - for (int frame : frameToTraitMultiname.keySet()) { - Multiname multiName = frameToTraitMultiname.get(frame); - if (multinameToMethodTrait.containsKey(multiName)) { - TraitMethodGetterSetter methodTrait = multinameToMethodTrait.get(multiName); + for (int frame : frameToTraitName.keySet()) { + String traitName = frameToTraitName.get(frame); + if (multinameToMethodTrait.containsKey(traitName)) { + TraitMethodGetterSetter methodTrait = multinameToMethodTrait.get(traitName); int methodIndex = methodTrait.method_info; MethodBody frameBody = abc.findBody(methodIndex);