From 417ffda41616c28f1467387316ee0c78d0962716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 19 Feb 2026 20:54:52 +0100 Subject: [PATCH] Fixed: Using public/private/protected/internal keywords on ambiguous namespace references and compiling such keywords with `::` suffix. --- CHANGELOG.md | 2 + .../src/com/jpexs/decompiler/flash/SWF.java | 2 +- .../flash/SourceGeneratorLocalData.java | 10 ++ .../decompiler/flash/abc/ScriptPack.java | 2 +- .../decompiler/flash/abc/avm2/CodeStats.java | 2 +- .../construction/NewClassIns.java | 2 +- .../flash/abc/avm2/model/AVM2Item.java | 12 +- .../abc/avm2/model/FullMultinameAVM2Item.java | 42 +++++- .../abc/avm2/model/NewFunctionAVM2Item.java | 2 +- .../parser/script/AVM2SourceGenerator.java | 30 ++++- .../abc/avm2/parser/script/AbcIndexing.java | 118 ++++++++++++----- .../parser/script/ActionScript3Parser.java | 72 +++++++--- .../script/ActionScript3SimpleParser.java | 31 ++++- .../abc/avm2/parser/script/CallAVM2Item.java | 2 +- .../abc/avm2/parser/script/NamespaceItem.java | 2 +- .../avm2/parser/script/PropertyAVM2Item.java | 124 +++++++++--------- .../parser/script/UnresolvedAVM2Item.java | 23 ++-- .../flash/abc/types/MethodBody.java | 12 +- .../flash/abc/types/traits/TraitClass.java | 4 +- .../flash/abc/types/traits/TraitFunction.java | 2 +- .../types/traits/TraitMethodGetterSetter.java | 2 +- .../abc/types/traits/TraitSlotConst.java | 11 +- .../decompiler/flash/xfl/XFLConverter.java | 2 +- .../decompiler/graph/model/LocalData.java | 9 +- .../flash/ActionScript3DecompileTestBase.java | 2 +- .../flash/ActionScript3DeobfuscatorTest.java | 2 +- .../as3decompile/ActionScript3ClassTest.java | 44 ++++++- .../flash/generators/AS3Generator.java | 2 +- .../testdata/as3_new/bin/as3_new.air.swf | Bin 35081 -> 35304 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 45686 -> 46034 bytes .../tests_classes/mypackage1/TestClass2.as | 46 ++++++- .../decompiler/flash/gui/abc/ABCPanel.java | 2 +- 32 files changed, 454 insertions(+), 164 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d8c0efa2..94bf88ea1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ All notable changes to this project will be documented in this file. - AS3 property resolving for KIND_NAMESPACE (like builtin for Strings, etc.) - [#2636] ActionScript - switches vs loop breaks - [#2636] ActionScript 3 - type coercion / convert, local registers type propagation +- Using public/private/protected/internal keywords on ambiguous namespace references + and compiling such keywords with `::` suffix. ## [25.1.0] - 2026-02-17 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 3127d47cc..75537d3ab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -840,7 +840,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { * @throws IOException On I/O error * @throws InterruptedException On interrupt */ - public static void initPlayer() throws IOException, InterruptedException { + public static synchronized void initPlayer() throws IOException, InterruptedException { if (playerGlobalAbcIndex == null) { /*if (Configuration.getPlayerSWC() == null) { throw new IOException("Player SWC library not found, please place it to " + Configuration.getFlashLibPath()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java index b3e597dc8..95a1c7355 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java @@ -145,6 +145,16 @@ public class SourceGeneratorLocalData implements Serializable { * Current protected namespace id */ public int protectedNs = 0; + + /** + * Current static protected namespace id + */ + public int staticProtectedNs = 0; + + /** + * Current internal namespace id + */ + public int internalNs = 0; /** * Is in static method diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index 5d875b535..3abafc92a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -440,7 +440,7 @@ public class ScriptPack extends AS3ClassTreeItem { if (!first) { writer.newLine(); } - abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "/.scriptinitializer", exportMode, abc, null, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "/.scriptinitializer", exportMode, abc, null, writer, fullyQualifiedNames, new HashSet<>(), -1); } else { writer.append(""); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java index a5ae9d7c6..e7f2eed29 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java @@ -85,7 +85,7 @@ public class CodeStats { if (stats.stackpos > ms) { ms = stats.stackpos; } - writer.appendNoHilight(i + ":" + stats.stackpos + (deltastack >= 0 ? "+" + deltastack : deltastack) + "," + stats.scopepos + " " + stats.ins.toString(writer, LocalData.create(new ArrayList<>(), null, abc, null, fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS, -1, new LinkedHashSet<>()))).newLine(); + writer.appendNoHilight(i + ":" + stats.stackpos + (deltastack >= 0 ? "+" + deltastack : deltastack) + "," + stats.scopepos + " " + stats.ins.toString(writer, LocalData.create(new ArrayList<>(), null, abc, null, fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS, -1, new LinkedHashSet<>(), -1))).newLine(); i++; } return writer; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java index c8c7041fc..2528d4c97 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java @@ -63,7 +63,7 @@ public class NewClassIns extends InstructionDefinition { } } } - obj.toString(writer, LocalData.create(localData.callStack /*??*/, localData.abcIndex, localData.abc, localData.localRegNames, localData.fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS, localData.swfVersion, localData.usedDeobfuscations)); + obj.toString(writer, LocalData.create(localData.callStack /*??*/, localData.abcIndex, localData.abc, localData.localRegNames, localData.fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS, localData.swfVersion, localData.usedDeobfuscations, clsIndex)); writer.finishHilights(); String baseType = writer.toString(); ABC abc = localData.abc; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java index e52dd1f0e..3621275d8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java @@ -36,6 +36,7 @@ import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.Reference; import java.util.ArrayList; @@ -159,8 +160,13 @@ public abstract class AVM2Item extends GraphTargetItem { } } - if (empty) { - ((FullMultinameAVM2Item) propertyName).appendTo(writer, localData, false); + if (empty) { + TypeItem parentType = null; + if (localData.classIndex > -1) { + DottedChain thisClass = localData.abc.instance_info.get(localData.classIndex).getName(localData.constantsAvm2).getNameWithNamespace(localData.usedDeobfuscations, localData.abc, localData.constantsAvm2, false); + parentType = new TypeItem(thisClass); + } + ((FullMultinameAVM2Item) propertyName).appendTo(writer, localData, false, parentType, isStatic); return writer; } @@ -223,7 +229,7 @@ public abstract class AVM2Item extends GraphTargetItem { } } - ((FullMultinameAVM2Item) propertyName).appendTo(writer, localData, true); + ((FullMultinameAVM2Item) propertyName).appendTo(writer, localData, true, returnType, isStatic); return writer; } else { writer.append("[").allowWrapHere(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index f7f5f9943..d11202dfd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AbcIndexing; import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import com.jpexs.helpers.Helper; import com.jpexs.helpers.Reference; import java.util.ArrayList; @@ -158,13 +160,13 @@ public class FullMultinameAVM2Item extends AVM2Item { public boolean isTopLevel(String tname, ABC abc, HashMap localRegNames, List fullyQualifiedNames, Set seenMethods) throws InterruptedException { String cname; if (name != null) { - cname = name.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS, -1, new LinkedHashSet<>())); + cname = name.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS, -1, new LinkedHashSet<>(), -1)); } else { cname = (abc.constants.getMultiname(multinameIndex).getName(new LinkedHashSet<>(), abc, abc.constants, fullyQualifiedNames, true, true)); } String cns = ""; if (namespace != null) { - cns = namespace.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS, -1, new LinkedHashSet<>())); + cns = namespace.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS, -1, new LinkedHashSet<>(), -1)); } else { Namespace ns = abc.constants.getMultiname(multinameIndex).getNamespace(abc.constants); if ((ns != null) && (ns.name_index != 0)) { @@ -189,10 +191,10 @@ public class FullMultinameAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - return appendTo(writer, localData, false); + return appendTo(writer, localData, false, null, false); } - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData, boolean afterDot) throws InterruptedException { + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData, boolean afterDot, GraphTargetItem parentType, boolean isStatic) throws InterruptedException { if (namespace != null) { namespace.toString(writer, localData); writer.append("::"); @@ -229,6 +231,38 @@ public class FullMultinameAVM2Item extends AVM2Item { String identifier = IdentifiersDeobfuscation.printIdentifier(localData.abc.getSwf(), localData.usedDeobfuscations, true, nsname); writer.hilightSpecial(identifier, HighlightSpecialType.TYPE_NAME, customNs.toRawString()); writer.appendNoHilight("::"); + } else { + if (parentType instanceof TypeItem) { //not ApplyTypeAVM2Item or UnboundedTypeItem + String rawName = constants.getMultiname(multinameIndex).getName(localData.usedDeobfuscations, localData.abc, localData.abc.constants, fullyQualifiedNames, true, true); + List defs = new ArrayList<>(); + List staticRef = new ArrayList<>(); + localData.abcIndex.getClassTraits(localData.usedDeobfuscations, parentType, localData.abc, null, true, true, true, true, true, defs, staticRef); + int numStaticUsed = 0; + int numInstanceUsed = 0; + for (int i = 0; i < defs.size(); i++) { + AbcIndexing.PropertyDef def = defs.get(i); + if (Objects.equals(rawName, def.getPropertyName())) { + //cannot access instance properties via static context + if (isStatic && !staticRef.get(i)) { + continue; + } + if (staticRef.get(i)) { + numStaticUsed++; + } else { + numInstanceUsed++; + } + } + } + if (numInstanceUsed > 1 || numStaticUsed > 1) { + Namespace ns = constants.getMultiname(multinameIndex).getSingleNamespace(localData.abc.constants); + if (ns != null) { + String prefix = Namespace.kindToPrefix(ns.kind); + if (prefix != null) { + writer.append(prefix).append("::"); + } + } + } + } } if (!isAttribute && afterDot && namespaceSuffix.isEmpty() && Configuration.as3QNameObfuscatedPropsInSquareBrackets.get()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java index e6cd8ce81..5899e2feb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java @@ -131,7 +131,7 @@ public class NewFunctionAVM2Item extends AVM2Item { List callStack = new ArrayList<>(localData.callStack); callStack.add(body); body.convert(localData.swfVersion, callStack, localData.abcIndex, new ConvertData(), path + "/inner", ScriptExportMode.AS, isStatic, methodIndex, scriptIndex, classIndex, abc, null, scopeStack, 0, new NulWriter(), localData.fullyQualifiedNames, null, false, new HashSet<>(localData.seenMethods), new ArrayList<>(), localData.usedDeobfuscations); - body.toString(localData.usedDeobfuscations, localData.swfVersion, callStack, localData.abcIndex, path + "/inner", ScriptExportMode.AS, abc, null, writer, localData.fullyQualifiedNames, new HashSet<>(localData.seenMethods)); + body.toString(localData.usedDeobfuscations, localData.swfVersion, callStack, localData.abcIndex, path + "/inner", ScriptExportMode.AS, abc, null, writer, localData.fullyQualifiedNames, new HashSet<>(localData.seenMethods), localData.classIndex); } writer.endBlock(); writer.endMethod(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index 35d77e177..52571986b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -667,6 +667,9 @@ public class AVM2SourceGenerator implements SourceGenerator { localData.pkg = pkg; localData.privateNs = abcIndex.getSelectedAbc().constants.getNamespaceId(Namespace.KIND_PRIVATE, pkg.toRawString().isEmpty() ? baseClassName : pkg.toRawString() + ":" + baseClassName, 0, true); localData.protectedNs = abcIndex.getSelectedAbc().constants.getNamespaceId(Namespace.KIND_PROTECTED, pkg.toRawString().isEmpty() ? baseClassName : pkg.toRawString() + ":" + baseClassName, 0, true); + localData.staticProtectedNs = abcIndex.getSelectedAbc().constants.getNamespaceId(Namespace.KIND_STATIC_PROTECTED, pkg.toRawString().isEmpty() ? baseClassName : pkg.toRawString() + ":" + baseClassName, 0, true); + localData.internalNs = abcIndex.getSelectedAbc().constants.getNamespaceId(Namespace.KIND_PACKAGE_INTERNAL, pkg.toRawString(), 0, true); + if (extendsVal == null && !isInterface) { extendsVal = new TypeItem(DottedChain.OBJECT); } @@ -1109,6 +1112,8 @@ public class AVM2SourceGenerator implements SourceGenerator { newlocalData.documentClass = localData.documentClass; newlocalData.privateNs = localData.privateNs; newlocalData.protectedNs = localData.protectedNs; + newlocalData.staticProtectedNs = localData.staticProtectedNs; + newlocalData.internalNs = localData.internalNs; newlocalData.isStatic = isStatic; newlocalData.subMethod = subMethod; newlocalData.numberContext = localData.numberContext; @@ -1177,6 +1182,8 @@ public class AVM2SourceGenerator implements SourceGenerator { newlocalData.documentClass = localData.documentClass; newlocalData.privateNs = localData.privateNs; newlocalData.protectedNs = localData.protectedNs; + newlocalData.staticProtectedNs = localData.staticProtectedNs; + newlocalData.internalNs = localData.internalNs; newlocalData.isStatic = isStatic; newlocalData.subMethod = subMethod; newlocalData.numberContext = localData.numberContext; @@ -2474,10 +2481,13 @@ public class AVM2SourceGenerator implements SourceGenerator { /** * Searches prototype chain. * + * @param nsKeyword Namespace keyword (public, protected, private, internal) * @param namespaceSuffix Namespace suffix * @param otherNs Other namespaces * @param privateNs Private namespace * @param protectedNs Protected namespace + * @param staticProtectedNs Static protected namespace + * @param internalNs Internal namespace * @param instanceOnly Instance only * @param abc ABC * @param pkg Package @@ -2494,7 +2504,23 @@ public class AVM2SourceGenerator implements SourceGenerator { * @param isType Is type * @return True if found */ - public static boolean searchPrototypeChain(Integer namespaceSuffix, List otherNs, int privateNs, int protectedNs, boolean instanceOnly, AbcIndexing abc, DottedChain pkg, String obj, String propertyName, Reference outName, Reference outNs, Reference outPropNs, Reference outPropNsKind, Reference outPropNsIndex, Reference outPropType, Reference outPropValue, Reference outPropValueAbc, Reference isType, Reference outPropTrait) { + public static boolean searchPrototypeChain(String nsKeyword, Integer namespaceSuffix, List otherNs, int privateNs, int protectedNs, int staticProtectedNs, int internalNs, boolean instanceOnly, AbcIndexing abc, DottedChain pkg, String obj, String propertyName, Reference outName, Reference outNs, Reference outPropNs, Reference outPropNsKind, Reference outPropNsIndex, Reference outPropType, Reference outPropValue, Reference outPropValueAbc, Reference isType, Reference outPropTrait) { + + if (nsKeyword != null) { + switch (nsKeyword) { + case "public": + return searchPrototypeChain(0, instanceOnly, abc, pkg, obj, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait); + case "protected": + if (searchPrototypeChain(staticProtectedNs, instanceOnly, abc, pkg, obj, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait)) { + return true; + } + return searchPrototypeChain(protectedNs, instanceOnly, abc, pkg, obj, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait); + case "private": + return searchPrototypeChain(privateNs, instanceOnly, abc, pkg, obj, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait); + case "internal": + return searchPrototypeChain(internalNs, instanceOnly, abc, pkg, obj, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait); + } + } // private and protected namespaces first so we find overriding functions before overridden functions if (namespaceSuffix != null) { if (searchPrototypeChain(namespaceSuffix, instanceOnly, abc, pkg, obj, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait)) { @@ -3058,7 +3084,7 @@ public class AVM2SourceGenerator implements SourceGenerator { ret.add(ins(AVM2Instructions.NewObject, 0)); ret.add(ins(AVM2Instructions.PushWith)); scope = localData.scopeStack.size(); - localData.scopeStack.add(new PropertyAVM2Item(null, false, item.functionName, "" /*??*/, abcIndex, new ArrayList<>(), localData.callStack, false)); + localData.scopeStack.add(new PropertyAVM2Item(null, false, item.functionName, "" /*??*/, abcIndex, new ArrayList<>(), localData.callStack, false, null)); } AVM2ConstantPool constants = abcIndex.getSelectedAbc().constants; ret.add(ins(AVM2Instructions.NewFunction, method(null, false, constants.getStringId(item.functionName, true), true, false, false, localData.callStack, localData.pkg, item.needsActivation, item.subvariables, 0 /*Set later*/, item.hasRest, item.line, localData.currentClassBaseName, null, false, localData, item.paramTypes, item.paramNames, item.paramValues, item.body, item.retType))); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java index 3e5620ccb..421161134 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java @@ -115,6 +115,8 @@ public final class AbcIndexing { private String propNsString = null; private int propNsIndex = 0; + + private int propNsKind = -1; private ABC abc = null; @@ -160,6 +162,7 @@ public final class AbcIndexing { return; } Namespace ns = abc.constants.getNamespace(propNsIndex); + this.propNsKind = ns.kind; switch (ns.kind) { case Namespace.KIND_PACKAGE: case Namespace.KIND_NAMESPACE: @@ -180,32 +183,25 @@ public final class AbcIndexing { * @param parent Parent type * @param propNsString Namespace string */ - public PropertyDef(String propName, GraphTargetItem parent, String propNsString) { + public PropertyDef(String propName, GraphTargetItem parent, String propNsString, int nsKind) { this.propName = propName; this.parent = parent; this.abc = null; + this.propNsKind = nsKind; this.propNsString = propNsString; } - /** - * Hash code - * @return Hash code - */ @Override public int hashCode() { - int hash = 3; - hash = 37 * hash + Objects.hashCode(this.propName); - hash = 37 * hash + Objects.hashCode(this.propNsString); - hash = 37 * hash + Objects.hashCode(this.parent); - hash = 37 * hash + this.propNsIndex; + int hash = 7; + hash = 59 * hash + Objects.hashCode(this.propName); + hash = 59 * hash + Objects.hashCode(this.parent); + hash = 59 * hash + Objects.hashCode(this.propNsString); + hash = 59 * hash + this.propNsIndex; + hash = 59 * hash + this.propNsKind; return hash; } - /** - * Equals - * @param obj Object - * @return True if equals - */ @Override public boolean equals(Object obj) { if (this == obj) { @@ -221,6 +217,9 @@ public final class AbcIndexing { if (this.propNsIndex != other.propNsIndex) { return false; } + if (this.propNsKind != other.propNsKind) { + return false; + } if (!Objects.equals(this.propName, other.propName)) { return false; } @@ -229,7 +228,7 @@ public final class AbcIndexing { } return Objects.equals(this.parent, other.parent); } - + } /** @@ -594,17 +593,65 @@ public final class AbcIndexing { return classNames; } - public void getClassTraits(Set usedDeobfuscations, GraphTargetItem cls, ABC abc, Integer scriptIndex, boolean getStatic, boolean getInstance, boolean getInheritance, List ret, List staticRet) { + public void getClassTraits(Set usedDeobfuscations, GraphTargetItem cls, ABC abc, Integer scriptIndex, boolean getStatic, boolean getInstance, boolean getInheritance, boolean getPrivate, boolean getProtected, List ret, List staticRet) { ClassIndex ci = findClass(cls, abc, scriptIndex); if (ci == null) { return; } ret.clear(); staticRet.clear(); - getClassIndexTraitNames(usedDeobfuscations, ret, staticRet, ci, getStatic, getInstance, getInheritance, new HashSet<>()); + getClassIndexTraitNames(usedDeobfuscations, ret, staticRet, ci, getStatic, getInstance, getInheritance, getPrivate, getProtected, new HashSet<>()); } - private void getClassIndexTraitNames(Set usedDeobfuscations, List ret, List staticRet, ClassIndex ci, boolean getStatic, boolean getInstance, boolean getInheritance, Set used) { + private static class UsedProperty { + private String propertyName; + private int nsKind; + private String namespaceStr; + private boolean isStatic; + + public UsedProperty(String propertyName, int nsKind, String namespaceStr, boolean isStatic) { + this.propertyName = propertyName; + this.nsKind = nsKind; + this.namespaceStr = namespaceStr; + this.isStatic = isStatic; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + Objects.hashCode(this.propertyName); + hash = 79 * hash + this.nsKind; + hash = 79 * hash + Objects.hashCode(this.namespaceStr); + hash = 79 * hash + (this.isStatic ? 1 : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final UsedProperty other = (UsedProperty) obj; + if (this.nsKind != other.nsKind) { + return false; + } + if (this.isStatic != other.isStatic) { + return false; + } + if (!Objects.equals(this.propertyName, other.propertyName)) { + return false; + } + return Objects.equals(this.namespaceStr, other.namespaceStr); + } + } + + private void getClassIndexTraitNames(Set usedDeobfuscations, List ret, List staticRet, ClassIndex ci, boolean getStatic, boolean getInstance, boolean getInheritance, boolean getPrivate, boolean getProtected, Set used) { GraphTargetItem ciName = multinameToType(usedDeobfuscations, ci.abc.instance_info.get(ci.index).name_index, ci.abc, ci.abc.constants); boolean isObject = ciName.equals(new TypeItem("Object")); @@ -619,14 +666,18 @@ public final class AbcIndexing { if (def.propNsIndex != 0) { nsKind = def.abc.constants.getNamespace(def.propNsIndex).kind; } - if (nsKind == Namespace.KIND_PRIVATE || nsKind == Namespace.KIND_PROTECTED || nsKind == Namespace.KIND_STATIC_PROTECTED) { + if (nsKind == Namespace.KIND_PRIVATE && !getPrivate) { + continue; + } + if ((nsKind == Namespace.KIND_PROTECTED || nsKind == Namespace.KIND_STATIC_PROTECTED) && !getProtected) { continue; } - if (Objects.equals(def.parent, ciName)) { - if (used.contains(def.propName)) { + if (Objects.equals(def.parent, ciName)) { + UsedProperty up = new UsedProperty(def.propName, def.propNsKind, def.propNsString, false); + if (used.contains(up)) { continue; } - used.add(def.propName); + used.add(up); ret.add(def); @@ -643,14 +694,18 @@ public final class AbcIndexing { if (def.propNsIndex != 0) { nsKind = def.abc.constants.getNamespace(def.propNsIndex).kind; } - if (nsKind == Namespace.KIND_PRIVATE || nsKind == Namespace.KIND_PROTECTED || nsKind == Namespace.KIND_STATIC_PROTECTED) { + if (nsKind == Namespace.KIND_PRIVATE && !getPrivate) { + continue; + } + if ((nsKind == Namespace.KIND_PROTECTED || nsKind == Namespace.KIND_STATIC_PROTECTED) && !getProtected) { continue; } if (Objects.equals(def.parent, ciName)) { - if (used.contains(def.propName)) { + UsedProperty up = new UsedProperty(def.propName, def.propNsKind, def.propNsString, true); + if (used.contains(up)) { continue; } - used.add(def.propName); + used.add(up); ret.add(def); staticRet.add(true); } @@ -658,11 +713,11 @@ public final class AbcIndexing { } if (parent != null) { - parent.getClassIndexTraitNames(usedDeobfuscations, ret, staticRet, ci, getStatic, getInstance, getInheritance, used); + parent.getClassIndexTraitNames(usedDeobfuscations, ret, staticRet, ci, getStatic, getInstance, getInheritance, getPrivate, getProtected, used); } if (getInheritance && ci.parent != null) { - getClassIndexTraitNames(usedDeobfuscations, ret, staticRet, ci.parent, getStatic, getInstance, getInheritance, used); + getClassIndexTraitNames(usedDeobfuscations, ret, staticRet, ci.parent, getStatic, getInstance, getInheritance, false, getProtected, used); } } @@ -869,7 +924,8 @@ public final class AbcIndexing { if (ci != null && ci.parent != null && (prop.abc == null || prop.propNsIndex == 0)) { AbcIndexing.ClassIndex ciParent = ci.parent; DottedChain parentClass = ciParent.abc.instance_info.get(ciParent.index).getName(ciParent.abc.constants).getNameWithNamespace(new LinkedHashSet<>(), ciParent.abc, ciParent.abc.constants, true); - TraitIndex pti = findProperty(new PropertyDef(prop.propName, new TypeItem(parentClass), prop.getPropNsString()), findStatic, findInstance, findProtected, foundStatic); + PropertyDef parentDef = new PropertyDef(prop.propName, new TypeItem(parentClass), prop.propNsString, prop.propNsKind); + TraitIndex pti = findProperty(parentDef, findStatic, findInstance, findProtected, foundStatic); if (pti != null) { return pti; } @@ -1006,7 +1062,7 @@ public final class AbcIndexing { * @param mapNs Map to index * @param scriptIndex Script index */ - protected void indexTraits(ABC abc, int name_index, Traits ts, Map map, Map mapNs, int scriptIndex) { + protected void indexTraits(ABC abc, int name_index, Traits ts, Map map, Map mapNs, int scriptIndex) { for (Trait t : ts.traits) { ValueKind propValue = null; if (t instanceof TraitSlotConst) { @@ -1026,7 +1082,7 @@ public final class AbcIndexing { } } - } + } } /** diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index 31c55e6ac..65c675a60 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -91,6 +91,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.operations.URShiftAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.UnPlusAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import com.jpexs.decompiler.flash.abc.types.Float4; +import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.abc.types.ScriptInfo; import com.jpexs.decompiler.flash.action.swf4.ActionIf; @@ -317,15 +318,22 @@ public class ActionScript3Parser { s = lex(); } else { s = lex(); - expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.MULTIPLY); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.MULTIPLY, + SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL); String propName = s.value.toString(); //Can be * + String nsKeyword = null; + if (s.isType(SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { + nsKeyword = s.value.toString(); + } GraphTargetItem propItem = null; s = lex(); String nsSuffix = ""; GraphTargetItem ns = null; if (s.type == SymbolType.NAMESPACE_OP) { - ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, false, null, lexer.yyline(), new DottedChain(new String[]{propName}, new String[]{""} /*FIXME ???*/), null, openedNamespaces, abcIndex); - variables.add((UnresolvedAVM2Item) ns); + if (nsKeyword == null) { + ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, false, null, lexer.yyline(), new DottedChain(new String[]{propName}, new String[]{""} /*FIXME ???*/), null, openedNamespaces, abcIndex); + variables.add((UnresolvedAVM2Item) ns); + } s = lex(); if (s.type == SymbolType.BRACKET_OPEN) { propItem = expression(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, true, variables, false, abc); @@ -337,6 +345,9 @@ public class ActionScript3Parser { propItem = null; } } else { + if (nsKeyword != null) { + throw new AVM2ParseException(nsKeyword + " not expected in this situation", lexer.yyline()); + } if (s.type == SymbolType.NAMESPACESUFFIX) { nsSuffix = "#" + s.value; } else { @@ -347,7 +358,7 @@ public class ActionScript3Parser { if (ns != null) { ret = new NamespacedAVM2Item(ns, propName, propItem, ret, attr, openedNamespaces, null); } else { - ret = new PropertyAVM2Item(ret, attr, propName, nsSuffix, abcIndex, openedNamespaces, new ArrayList<>(), nullDot); + ret = new PropertyAVM2Item(ret, attr, propName, nsSuffix, abcIndex, openedNamespaces, new ArrayList<>(), nullDot, nsKeyword); } s = lex(); } @@ -369,18 +380,30 @@ public class ActionScript3Parser { attribute = true; s = lex(); } - expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP, + SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL); + + String nsKeyword = null; + if (s.isType(SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { + nsKeyword = s.value.toString(); + } name2 += s.value.toString(); s = lex(); boolean attrBracket = false; String nsSuffix = ""; if (s.type == SymbolType.NAMESPACESUFFIX) { + if (nsKeyword != null) { + throw new AVM2ParseException(nsKeyword + " not expected in this situation", lexer.yyline()); + } s = lex(); nsSuffix = "#" + s.value; } name = name.add(attribute, name2, nsSuffix); - while (s.isType(SymbolType.DOT)) { + while (s.isType(SymbolType.DOT)) { + if (nsKeyword != null) { + throw new AVM2ParseException(nsKeyword + " not expected in this situation", lexer.yyline()); + } //name += s.value.toString(); //. or :: s = lex(); name2 = ""; @@ -400,12 +423,21 @@ public class ActionScript3Parser { continue; } } else { - expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, SymbolType.MULTIPLY); + expected( + s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, SymbolType.MULTIPLY, + SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL + ); name2 += s.value.toString(); + if (s.isType(SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { + nsKeyword = s.value.toString(); + } } s = lex(); nsSuffix = ""; if (s.type == SymbolType.NAMESPACESUFFIX) { + if (nsKeyword != null) { + throw new AVM2ParseException(nsKeyword + " not expected in this situation", lexer.yyline()); + } nsSuffix = "#" + s.value; s = lex(); } @@ -427,6 +459,8 @@ public class ActionScript3Parser { } name = name.getWithoutLast(); s = lex(); + } else if (nsKeyword != null) { + throw new AVM2ParseException(nsKeyword + " not expected in this situation", lexer.yyline()); } GraphTargetItem ret = null; @@ -437,16 +471,20 @@ public class ActionScript3Parser { ret = unr; } if (nsname != null) { - UnresolvedAVM2Item ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, typeOnly, null, lexer.yyline(), new DottedChain(new String[]{nsname}), null, openedNamespaces, abcIndex); - variables.add(ns); - ret = new NamespacedAVM2Item(ns, nsprop, nspropItem, ret, nsAtribute, openedNamespaces, null); + if (nsKeyword != null && nspropItem == null) { + ret = new PropertyAVM2Item(ret, nsAtribute, nsprop, nsSuffix, abcIndex, openedNamespaces, new ArrayList(), false, nsKeyword); + } else { + UnresolvedAVM2Item ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, typeOnly, null, lexer.yyline(), new DottedChain(new String[]{nsname}), null, openedNamespaces, abcIndex); + variables.add(ns); + ret = new NamespacedAVM2Item(ns, nsprop, nspropItem, ret, nsAtribute, openedNamespaces, null); + } } - if (s.type == SymbolType.BRACKET_OPEN) { + if (s.isType(SymbolType.BRACKET_OPEN, SymbolType.DOT, SymbolType.NULL_DOT, SymbolType.TYPENAME)) { lexer.pushback(s); - if (attrBracket) { + /*if (attrBracket) { lexer.pushback(new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, "@")); lexer.pushback(new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.DOT, ".")); - } + }*/ ret = member(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, ret, registerVars, inFunction, inMethod, variables, abc); } else { lexer.pushback(s); @@ -586,7 +624,7 @@ public class ActionScript3Parser { if (hasRest) { subvariables.add(new NameAVM2Item(TypeItem.UNBOUNDED, lexer.yyline(), false, paramNames.get(paramNames.size() - 1), "", null, true, openedNamespaces, abcIndex, false)); } - subvariables.add(new NameAVM2Item(thisType, lexer.yyline(), false, "arguments", "", null, true, openedNamespaces, abcIndex, false)); + subvariables.add(new NameAVM2Item(TypeItem.ARRAY, lexer.yyline(), false, "arguments", "", null, true, openedNamespaces, abcIndex, false)); int parCnt = subvariables.size(); Reference needsActivation2 = new Reference<>(false); if (!isInterface && !isNative) { @@ -648,7 +686,7 @@ public class ActionScript3Parser { lexer.pushback(s); return metadata; } - + private void classTraits(List> allOpenedNamespaces, boolean outsidePackage, List cinitVariables, Reference cinitNeedsActivation, List cinit, List importedClasses, List openedNamespaces, NamespaceItem pkg, String classNameStr, boolean isInterface, List traits, List iinitVariables, Reference iinitNeedsActivation, Reference iinit, ABC abc) throws AVM2ParseException, IOException, CompilationException, InterruptedException { NamespaceItem publicNs = new NamespaceItem("", Namespace.KIND_PACKAGE); @@ -2739,6 +2777,10 @@ public class ActionScript3Parser { case THIS: case SUPER: case ATTRIBUTE: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: lexer.pushback(s); ret = name(allOpenedNamespaces, thisType, pkg, needsActivation, false, openedNamespaces, registerVars, inFunction, inMethod, variables, importedClasses, abc); allowMemberOrCall = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java index 79437e285..ae902de41 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java @@ -274,9 +274,14 @@ public class ActionScript3SimpleParser implements SimpleParser { s = lex(); } else { s = lex(); - if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.MULTIPLY)) { + if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.MULTIPLY, + SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { break; } + ParsedSymbol nsKeyword = null; + if (s.isType(SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { + nsKeyword = s; + } String propName = s.value.toString(); //Can be * int propPosition = s.position; s = lex(); @@ -292,6 +297,9 @@ public class ActionScript3SimpleParser implements SimpleParser { lastVarName = lastVarName.add(propName + "::" + s.value.toString()); variables.add(new Variable(false, lastVarName, s.position, null)); } else { + if (nsKeyword != null) { + errors.add(new SimpleParseException(nsKeyword.value + " not expected in this situation", lexer.yyline(), nsKeyword.position)); + } lastVarName = lastVarName.add(propName); variables.add(new Variable(false, lastVarName, propPosition, null)); if (s.type == SymbolType.NAMESPACESUFFIX) { @@ -320,14 +328,22 @@ public class ActionScript3SimpleParser implements SimpleParser { lastName = s.value.toString(); s = lex(); } - if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP)) { + if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP, + SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { return new Path(); } + ParsedSymbol nsKeyword = null; + if (s.isType(SymbolType.PUBLIC, SymbolType.PROTECTED, SymbolType.PRIVATE, SymbolType.INTERNAL)) { + nsKeyword = s; + } lastName += s.value.toString(); int identPos = s.position; s = lex(); boolean attrBracket = false; if (s.type == SymbolType.NAMESPACESUFFIX) { + if (nsKeyword != null) { + errors.add(new SimpleParseException(nsKeyword.value + " not expected in this situation", lexer.yyline(), nsKeyword.position)); + } s = lex(); lastName += "#" + s.value; } @@ -335,6 +351,9 @@ public class ActionScript3SimpleParser implements SimpleParser { Path fullName = new Path(lastName); while (s.isType(SymbolType.DOT)) { + if (nsKeyword != null) { + errors.add(new SimpleParseException(nsKeyword.value + " not expected in this situation", lexer.yyline(), nsKeyword.position)); + } variables.add(new Variable(false, fullName, identPos)); variables.add(new Separator(fullName, s.position)); s = lex(); @@ -382,6 +401,9 @@ public class ActionScript3SimpleParser implements SimpleParser { } s = lex(); } else { + if (nsKeyword != null) { + errors.add(new SimpleParseException(nsKeyword.value + " not expected in this situation", lexer.yyline(), nsKeyword.position)); + } variables.add(new Variable(false, fullName, identPos)); } @@ -2125,6 +2147,11 @@ public class ActionScript3SimpleParser implements SimpleParser { case THIS: case SUPER: case ATTRIBUTE: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + lexer.pushback(s); lastVarName = name(errors, thisType, needsActivation, openedNamespaces, registerVars, inFunction, inMethod, isStatic, variables, importedClasses, abc); ret = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java index eea93d7fb..9160b9a6d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java @@ -139,7 +139,7 @@ public class CallAVM2Item extends AVM2Item { nobj.setRegNumber(0); obj = nobj; }*/ - PropertyAVM2Item p = new PropertyAVM2Item(obj, n.isAttribute(), n.getVariableName(), n.getNamespaceSuffix(), g.abcIndex, n.openedNamespaces, new ArrayList<>(), false); + PropertyAVM2Item p = new PropertyAVM2Item(obj, n.isAttribute(), n.getVariableName(), n.getNamespaceSuffix(), g.abcIndex, n.openedNamespaces, new ArrayList<>(), false, null); p.setAssignedValue(n.getAssignedValue()); callable = p; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java index 244ddde5e..6e59d02ee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java @@ -136,7 +136,7 @@ public class NamespaceItem { } if (kind == KIND_NAMESPACE_CUSTOM) { String custom = name.toRawString(); - PropertyAVM2Item prop = new PropertyAVM2Item(null, false, custom, "", abcIndex, openedNamespaces, new ArrayList<>(), false); + PropertyAVM2Item prop = new PropertyAVM2Item(null, false, custom, "", abcIndex, openedNamespaces, new ArrayList<>(), false, null); Reference value = new Reference<>(null); Reference outAbc = new Reference<>(null); Reference isType = new Reference<>(false); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java index e32c3f9e7..f3967bcf3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java @@ -97,10 +97,11 @@ public class PropertyAVM2Item extends AssignableAVM2Item { */ public List scopeStack = new ArrayList<>(); private final boolean nullish; + private final String nsKeyword; @Override public AssignableAVM2Item copy() { - PropertyAVM2Item p = new PropertyAVM2Item(object, attribute, propertyName, namespaceSuffix, abcIndex, openedNamespaces, callStack, nullish); + PropertyAVM2Item p = new PropertyAVM2Item(object, attribute, propertyName, namespaceSuffix, abcIndex, openedNamespaces, callStack, nullish, nsKeyword); return p; } @@ -115,8 +116,9 @@ public class PropertyAVM2Item extends AssignableAVM2Item { * @param openedNamespaces Opened namespaces * @param callStack Call stack * @param nullish Nullish + * @param nsKeyword Namespace keyword (public,protected,private,internal) */ - public PropertyAVM2Item(GraphTargetItem object, boolean attribute, String propertyName, String namespaceSuffix, AbcIndexing abcIndex, List openedNamespaces, List callStack, boolean nullish) { + public PropertyAVM2Item(GraphTargetItem object, boolean attribute, String propertyName, String namespaceSuffix, AbcIndexing abcIndex, List openedNamespaces, List callStack, boolean nullish, String nsKeyword) { this.attribute = attribute; this.propertyName = propertyName; this.namespaceSuffix = namespaceSuffix; @@ -125,6 +127,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { this.openedNamespaces = openedNamespaces; this.callStack = callStack; this.nullish = nullish; + this.nsKeyword = nsKeyword; } @Override @@ -154,9 +157,35 @@ public class PropertyAVM2Item extends AssignableAVM2Item { * @throws CompilationException On compilation error */ public void resolve(boolean mustExist, SourceGeneratorLocalData localData, Reference isType, Reference objectType, Reference propertyType, Reference propertyIndex, Reference propertyValue, Reference propertyValueABC, Reference propertyTrait) throws CompilationException { + List openedNamespaceIds = new ArrayList<>(); + for (int i = 0; i < openedNamespaces.size(); i++) { + if (!openedNamespaces.get(i).isResolved()) { + continue; + } + int nsindex = openedNamespaces.get(i).getCpoolIndex(abcIndex); + openedNamespaceIds.add(nsindex); + } + Integer namespaceSuffixInt = null; if (!"".equals(namespaceSuffix)) { namespaceSuffixInt = Integer.parseInt(namespaceSuffix.substring(1)); + } + if (nsKeyword != null) { + switch (nsKeyword) { + case "public": + int publicNs = abcIndex.getSelectedAbc().constants.getNamespaceId(Namespace.KIND_PACKAGE, "", 0, false);; + openedNamespaceIds = Arrays.asList(namespaceSuffixInt = publicNs); + break; + case "private": + openedNamespaceIds = Arrays.asList(namespaceSuffixInt = localData.privateNs); + break; + case "protected": + openedNamespaceIds = Arrays.asList(localData.staticProtectedNs, localData.protectedNs); + break; + case "internal": + openedNamespaceIds = Arrays.asList(namespaceSuffixInt = localData.internalNs); + break; + } } isType.setVal(false); GraphTargetItem thisType = new TypeItem(localData.getFullClass()); @@ -212,20 +241,22 @@ public class PropertyAVM2Item extends AssignableAVM2Item { boolean foundInCallStack = false; if (objType == null) { - for (MethodBody b : callStack) { - for (int i = 0; i < b.traits.traits.size(); i++) { - Trait t = b.traits.traits.get(i); - if (t.getName(abc).getName(new LinkedHashSet<>(), abc, constants, null, true, true).equals(propertyName)) { - if (t instanceof TraitSlotConst) { - TraitSlotConst tsc = (TraitSlotConst) t; - objType = new TypeItem(DottedChain.FUNCTION); - propType = AbcIndexing.multinameToType(new LinkedHashSet<>(), tsc.type_index, abc, constants); - propIndex = tsc.name_index; - if (!localData.traitUsages.containsKey(b)) { - localData.traitUsages.put(b, new ArrayList<>()); + if (nsKeyword == null) { + for (MethodBody b : callStack) { + for (int i = 0; i < b.traits.traits.size(); i++) { + Trait t = b.traits.traits.get(i); + if (t.getName(abc).getName(new LinkedHashSet<>(), abc, constants, null, true, true).equals(propertyName)) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; + objType = new TypeItem(DottedChain.FUNCTION); + propType = AbcIndexing.multinameToType(new LinkedHashSet<>(), tsc.type_index, abc, constants); + propIndex = tsc.name_index; + if (!localData.traitUsages.containsKey(b)) { + localData.traitUsages.put(b, new ArrayList<>()); + } + localData.traitUsages.get(b).add(i); + foundInCallStack = true; } - localData.traitUsages.get(b).add(i); - foundInCallStack = true; } } } @@ -245,11 +276,12 @@ public class PropertyAVM2Item extends AssignableAVM2Item { Reference outPropValueAbc = new Reference<>(null); Reference outPropTrait = new Reference<>(null); List otherNs = new ArrayList<>(); - for (NamespaceItem n : openedNamespaces) { + /*for (NamespaceItem n : openedNamespaces) { if (n.isResolved()) { otherNs.add(n.getCpoolIndex(abcIndex)); } - } + }*/ + otherNs.addAll(openedNamespaceIds); if ((object instanceof NameAVM2Item) && "super".equals(((NameAVM2Item) object).getVariableName())) { // super is special cause its static type is the super class, but it still allows access to protected members // so for super to work we need to also allow the protected namespace of the super class @@ -271,7 +303,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { propTrait = sp.trait; } } - if (propType == null && AVM2SourceGenerator.searchPrototypeChain(namespaceSuffixInt, otherNs, localData.privateNs, localData.protectedNs, false, abcIndex, ftn.getWithoutLast(), ftn.getLast(), propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait)) { + if (propType == null && AVM2SourceGenerator.searchPrototypeChain(nsKeyword, namespaceSuffixInt, otherNs, localData.privateNs, localData.protectedNs, localData.staticProtectedNs, localData.internalNs, false, abcIndex, ftn.getWithoutLast(), ftn.getLast(), propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait)) { objType = new TypeItem(outNs.getVal().addWithSuffix(outName.getVal())); propType = outPropType.getVal(); propIndex = constants.getMultinameId(Multiname.createQName(false, @@ -287,14 +319,10 @@ public class PropertyAVM2Item extends AssignableAVM2Item { if (objType == null) { loopobjType: - for (int i = 0; i < openedNamespaces.size(); i++) { - if (!openedNamespaces.get(i).isResolved()) { - continue; - } - int nsindex = openedNamespaces.get(i).getCpoolIndex(abcIndex); - - int nsKind = openedNamespaces.get(i).kind; - DottedChain nsname = openedNamespaces.get(i).name; + for (int nsindex : openedNamespaceIds) { + Namespace ns = abcIndex.getSelectedAbc().constants.getNamespace(nsindex); + int nsKind = ns.kind; + DottedChain nsname = ns.getName(abcIndex.getSelectedAbc().constants); if (nsname.isTopLevel()) { continue; @@ -313,40 +341,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } } } - if (name_index > 0) { - //I believe these can be commented out... as it breaks #1840 - /*for (int c = 0; c < abc.instance_info.size(); c++) { - if (abc.instance_info.get(c).deleted) { - continue; - } - for (Trait t : abc.instance_info.get(c).instance_traits.traits) { - if (t.name_index == name_index) { - objType = multinameToType(abc.instance_info.get(c).name_index, constants); - propType = AVM2SourceGenerator.getTraitReturnType(abcIndex, t); - propIndex = t.name_index; - if (t instanceof TraitSlotConst) { - TraitSlotConst tsc = (TraitSlotConst) t; - propValue = new ValueKind(tsc.value_index, tsc.value_kind); - propValueAbc = abc; - } - break loopobjType; - } - } - for (Trait t : abc.class_info.get(c).static_traits.traits) { - if (t.name_index == name_index) { - objType = multinameToType(abc.instance_info.get(c).name_index, constants); - propType = AVM2SourceGenerator.getTraitReturnType(abcIndex, t); - propIndex = t.name_index; - if (t instanceof TraitSlotConst) { - TraitSlotConst tsc = (TraitSlotConst) t; - propValue = new ValueKind(tsc.value_index, tsc.value_kind); - propValueAbc = abc; - } - break loopobjType; - } - } - }*/ - + if (name_index > 0) { for (ScriptInfo si : abc.script_info) { if (si.deleted) { continue; @@ -369,7 +364,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } } if (nsKind == Namespace.KIND_PACKAGE && propertyName != null) { - AbcIndexing.TraitIndex p = abcIndex.findNsProperty(new AbcIndexing.PropertyNsDef(propertyName, nsname, abc, openedNamespaces.get(i).getCpoolIndex(abcIndex)), true, true); + AbcIndexing.TraitIndex p = abcIndex.findNsProperty(new AbcIndexing.PropertyNsDef(propertyName, nsname, abc, nsindex), true, true); Reference outName = new Reference<>(""); Reference outNs = new Reference<>(DottedChain.EMPTY); @@ -382,12 +377,13 @@ public class PropertyAVM2Item extends AssignableAVM2Item { Reference outPropTrait = new Reference<>(null); if (p != null && (p.objType instanceof TypeItem)) { List otherns = new ArrayList<>(); - for (NamespaceItem n : openedNamespaces) { + otherns.addAll(openedNamespaceIds); + /*for (NamespaceItem n : openedNamespaces) { if (n.isResolved()) { otherns.add(n.getCpoolIndex(abcIndex)); } - } - if (AVM2SourceGenerator.searchPrototypeChain(namespaceSuffixInt, otherns, localData.privateNs, localData.protectedNs, false, abcIndex, nsname, (((TypeItem) p.objType).fullTypeName.getLast()), propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait)) { + }*/ + if (AVM2SourceGenerator.searchPrototypeChain(nsKeyword, namespaceSuffixInt, otherns, localData.privateNs, localData.protectedNs, localData.staticProtectedNs, localData.internalNs, false, abcIndex, nsname, (((TypeItem) p.objType).fullTypeName.getLast()), propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc, isType, outPropTrait)) { objType = new TypeItem(outNs.getVal().addWithSuffix(outName.getVal())); propType = p.returnType; propIndex = constants.getMultinameId(Multiname.createQName(false, diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java index 7daf5f5db..3c5c9d048 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java @@ -43,6 +43,7 @@ import com.jpexs.helpers.Reference; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -405,7 +406,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { * @return Resolved item * @throws CompilationException On compilation error */ - public GraphTargetItem resolve(SourceGeneratorLocalData localData /*can be null!!!*/, String currentClassFullName, GraphTargetItem thisType, List paramTypes, List paramNames, AbcIndexing abc, List callStack, List variables) throws CompilationException { + public GraphTargetItem resolve(SourceGeneratorLocalData localData /*can be null!!!*/, String currentClassFullName, GraphTargetItem thisType, List paramTypes, List paramNames, AbcIndexing abc, List callStack, List variables) throws CompilationException { if (scopeStack.isEmpty()) { //Everything is multiname property in with command //search for variable @@ -419,7 +420,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { ret.setRegNumber(n.getRegNumber()); resolved = ret; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -446,7 +447,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { GraphTargetItem ret = new NameAVM2Item(t, line, name.isAttribute(0), name.get(0), name.getNamespaceSuffix(0), null, false, openedNamespaces, abcIndex, false); resolved = ret; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -459,7 +460,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { boolean isProperty = false; if (localData != null) { //resolve can be called without localData - PropertyAVM2Item resolvedx = new PropertyAVM2Item(null, name.isAttribute(0), name.get(0), name.getNamespaceSuffix(0), abc, openedNamespaces, callStack, false); + PropertyAVM2Item resolvedx = new PropertyAVM2Item(null, name.isAttribute(0), name.get(0), name.getNamespaceSuffix(0), abc, openedNamespaces, callStack, false, null); ((PropertyAVM2Item) resolvedx).scopeStack = scopeStack; ((PropertyAVM2Item) resolvedx).setAssignedValue(assignedValue); Reference objectType = new Reference<>(null); @@ -489,7 +490,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { if (ci != null) { resolved = ti; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -516,7 +517,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { } resolved = ti; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -534,7 +535,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { TypeItem ret = new TypeItem(imp); resolved = ret; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -567,7 +568,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { TypeItem ret = new TypeItem(fname); resolved = ret; for (int j = i + 1; j < name.size(); j++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(j), name.get(j), name.getNamespaceSuffix(j), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(j), name.get(j), name.getNamespaceSuffix(j), abc, openedNamespaces, new ArrayList<>(), false, null); if (j == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -596,7 +597,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { TypeItem ret = ti; resolved = ret; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -633,7 +634,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { NameAVM2Item ret = new NameAVM2Item(ntype, line, name.isAttribute(0), name.get(0), name.getNamespaceSuffix(0), null, false, openedNamespaces, abcIndex, false); resolved = ret; for (int i = 1; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, new ArrayList<>(), false, null); if (i == name.size() - 1) { ((PropertyAVM2Item) resolved).assignedValue = assignedValue; } @@ -656,7 +657,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { resolved = null; GraphTargetItem ret = null; for (int i = 0; i < name.size(); i++) { - resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, callStack, false); + resolved = new PropertyAVM2Item(resolved, name.isAttribute(i), name.get(i), name.getNamespaceSuffix(i), abc, openedNamespaces, callStack, false, null); if (ret == null) { ((PropertyAVM2Item) resolved).scopeStack = scopeStack; ret = resolved; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index 5b9162ba0..91888afdd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java @@ -478,7 +478,7 @@ public final class MethodBody implements Cloneable { convertedItems1 = converted.getCode().toGraphTargetItems(usedDeobfuscations, swfVersion, callStack, abcIndex, convertData.thisHasDefaultToPrimitive, convertData, path, methodIndex, isStatic, scriptIndex, classIndex, abc, converted, localRegNames, scopeStack, initializerType, fullyQualifiedNames, initTraits, 0, new HashMap<>(), initTraitClasses); //converted.getCode().visitCode(converted) } try (Statistics s = new Statistics("Graph.graphToString")) { - Graph.graphToString(convertedItems1, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames, seenMethods, exportMode, swfVersion, usedDeobfuscations)); + Graph.graphToString(convertedItems1, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames, seenMethods, exportMode, swfVersion, usedDeobfuscations, classIndex)); } convertedItems = convertedItems1; } @@ -537,10 +537,11 @@ public final class MethodBody implements Cloneable { * @param writer Writer * @param fullyQualifiedNames Fully qualified names * @param seenMethods Seen methods + * @param classIndex Class index * @return Writer * @throws InterruptedException On interrupt */ - public GraphTextWriter toString(Set usedDeobfuscations, int swfVersion, List callStack, AbcIndexing abcIndex, final String path, ScriptExportMode exportMode, final ABC abc, final Trait trait, final GraphTextWriter writer, final List fullyQualifiedNames, Set seenMethods) throws InterruptedException { + public GraphTextWriter toString(Set usedDeobfuscations, int swfVersion, List callStack, AbcIndexing abcIndex, final String path, ScriptExportMode exportMode, final ABC abc, final Trait trait, final GraphTextWriter writer, final List fullyQualifiedNames, Set seenMethods, int classIndex) throws InterruptedException { seenMethods.add(method_info); if (exportMode != ScriptExportMode.AS) { @@ -571,7 +572,7 @@ public final class MethodBody implements Cloneable { fullyQualifiedNames2.remove(tname); } - Graph.graphToString(convertedItems, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames2, seenMethods, exportMode, swfVersion, usedDeobfuscations)); + Graph.graphToString(convertedItems, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames2, seenMethods, exportMode, swfVersion, usedDeobfuscations, classIndex)); //writer.endMethod(); } else if (convertException instanceof TimeoutException) { // exception was logged in convert method @@ -665,16 +666,17 @@ public final class MethodBody implements Cloneable { * @param abcIndex ABC indexing * @param scriptIndex Script index * @param seenMethods Seen methods + * @param classIndex Class index * @return High-level source code */ - public String toSource(Set usedDeobfuscations, int swfVersion, List callStack, AbcIndexing abcIndex, int scriptIndex, Set seenMethods) { + public String toSource(Set usedDeobfuscations, int swfVersion, List callStack, AbcIndexing abcIndex, int scriptIndex, Set seenMethods, int classIndex) { ConvertData convertData = new ConvertData(); convertData.deobfuscationMode = 0; try { convert(swfVersion, callStack, abcIndex, convertData, "", ScriptExportMode.AS, false, method_info, 0, 0, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, seenMethods, new ArrayList<>(), usedDeobfuscations); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); writer.indent().indent().indent(); - toString(usedDeobfuscations, swfVersion, callStack, abcIndex, "", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), seenMethods); + toString(usedDeobfuscations, swfVersion, callStack, abcIndex, "", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), seenMethods, classIndex); writer.unindent().unindent().unindent(); writer.finishHilights(); return writer.toString(); 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 4cbe0983d..dd1d18eaf 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 @@ -244,7 +244,7 @@ public class TraitClass extends Trait implements TraitWithSlot { first.setVal(false); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "/" + instanceInfoName + ".staticinitializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "/" + instanceInfoName + ".staticinitializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>(), classIndex); //first.setVal(true); //writer.endBlock(); } else { @@ -296,7 +296,7 @@ public class TraitClass extends Trait implements TraitWithSlot { if (body != null) { List callStack = new ArrayList<>(); callStack.add(body); - body.toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "/" + instanceInfoName + ".initializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + body.toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "/" + instanceInfoName + ".initializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>(), classIndex); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index b3f63f4c3..19bdc0289 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -121,7 +121,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { //writeUses(scriptIndex, classIndex, isStatic, abc, writer); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "." + abc.constants.getMultiname(name_index).getName(usedDeobfuscations, abc, abc.constants, fullyQualifiedNames, false, true), exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path + "." + abc.constants.getMultiname(name_index).getName(usedDeobfuscations, abc, abc.constants, fullyQualifiedNames, false, true), exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>(), classIndex); } writer.endBlock(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index d6fe6a52f..a53e21359 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -169,7 +169,7 @@ public class TraitMethodGetterSetter extends Trait { //writeUses(scriptIndex, classIndex, isStatic, abc, writer); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path, exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swfVersion, callStack, abcIndex, path, exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>(), classIndex); } } else { String retTypeRaw = abc.method_info.get(method_info).getReturnTypeRaw(abc, abc.constants, fullyQualifiedNames); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java index 8b5f8646d..1c0e19369 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java @@ -177,9 +177,10 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { * @param writer Writer * @param abc ABC * @param fullyQualifiedNames Fully qualified names + * @param classIndex Class index * @throws InterruptedException On interrupt */ - public void getValueStr(Set usedDeobfuscations, int swfVersion, AbcIndexing abcIndex, ScriptExportMode exportMode, ConvertData convertData, GraphTextWriter writer, ABC abc, List fullyQualifiedNames) throws InterruptedException { + public void getValueStr(Set usedDeobfuscations, int swfVersion, AbcIndexing abcIndex, ScriptExportMode exportMode, ConvertData convertData, GraphTextWriter writer, ABC abc, List fullyQualifiedNames, int classIndex) throws InterruptedException { if (convertData.assignedValues.containsKey(this)) { AssignedValue assignment = convertData.assignedValues.get(this); @@ -195,7 +196,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { if (exportMode != ScriptExportMode.AS_METHOD_STUBS) { List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(abc.findBodyIndex(assignment.method))); - assignment.value.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode, swfVersion, usedDeobfuscations)); + assignment.value.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode, swfVersion, usedDeobfuscations, classIndex)); } writer.endMethod(); writer.endTrait(); @@ -259,13 +260,13 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { List callStack = new ArrayList<>(); AssignedValue assignment = convertData.assignedValues.get(this); callStack.add(abc.bodies.get(abc.findBodyIndex(assignment.method))); - return val.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode, swfVersion, usedDeobfuscations)); + return val.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode, swfVersion, usedDeobfuscations, classIndex)); } } getNameStr(writer, abc, fullyQualifiedNames, usedDeobfuscations); if (hasValueStr(abc, convertData)) { writer.appendNoHilight(" = "); - getValueStr(usedDeobfuscations, swfVersion, abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames); + getValueStr(usedDeobfuscations, swfVersion, abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames, classIndex); } return writer.appendNoHilight(";").newLine(); } @@ -274,7 +275,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { public void convert(Set usedDeobfuscations, int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { getNameStr(writer, abc, fullyQualifiedNames, usedDeobfuscations); if (hasValueStr(abc, convertData)) { - getValueStr(usedDeobfuscations, swfVersion, abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames); + getValueStr(usedDeobfuscations, swfVersion, abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames, classIndex); } } 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 9e447c607..72131a28e 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 @@ -3727,7 +3727,7 @@ public class XFLConverter { } StringBuilderTextWriter writer = new StringBuilderTextWriter(Configuration.getCodeFormatting(), scriptBuilder); - frameBody.toString(new LinkedHashSet<>(), swfVersion, callStack, abcIndex, "??", ScriptExportMode.AS, abc, methodTrait, writer, new ArrayList<>(), new HashSet<>()); + frameBody.toString(new LinkedHashSet<>(), swfVersion, callStack, abcIndex, "??", ScriptExportMode.AS, abc, methodTrait, writer, new ArrayList<>(), new HashSet<>(), classIndex); String script = scriptBuilder.toString(); ret.put(frame, script); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java index ad044219a..543603e9c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java @@ -100,6 +100,11 @@ public class LocalData { * SWF version */ public int swfVersion; + + /** + * Class index + */ + public int classIndex; private LocalData() { } @@ -133,9 +138,10 @@ public class LocalData { * @param exportMode Export mode * @param swfVersion SWF version * @param usedDeobfuscations Used deobfuscations + * @param classIndex Class index * @return Local data */ - public static LocalData create(List callStack, AbcIndexing abcIndex, ABC abc, HashMap localRegNames, List fullyQualifiedNames, Set seenMethods, ScriptExportMode exportMode, int swfVersion, Set usedDeobfuscations) { + public static LocalData create(List callStack, AbcIndexing abcIndex, ABC abc, HashMap localRegNames, List fullyQualifiedNames, Set seenMethods, ScriptExportMode exportMode, int swfVersion, Set usedDeobfuscations, int classIndex) { LocalData localData = new LocalData(); localData.abc = abc; localData.constantsAvm2 = abc.constants; @@ -148,6 +154,7 @@ public class LocalData { localData.swfVersion = swfVersion; localData.swf = abc.getSwf(); localData.usedDeobfuscations = usedDeobfuscations; + localData.classIndex = classIndex; return localData; } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java index ea4ed7feb..00f89daeb 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java @@ -116,7 +116,7 @@ public abstract class ActionScript3DecompileTestBase extends ActionScriptTestBas Set usedDeobfuscations = new LinkedHashSet<>(); abc.bodies.get(bodyIndex).convert(swf.version, callStack, swf.getAbcIndex(), new ConvertData(), "run", ScriptExportMode.AS, isStatic, abc.bodies.get(bodyIndex).method_info, scriptIndex, clsIndex, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), abc.instance_info.get(clsIndex).instance_traits, true, new HashSet<>(), new ArrayList<>(), usedDeobfuscations); writer = new HighlightedTextWriter(new CodeFormatting(), false); - abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swf.version, callStack, swf.getAbcIndex(), "run", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), new HashSet<>()); + abc.bodies.get(bodyIndex).toString(usedDeobfuscations, swf.version, callStack, swf.getAbcIndex(), "run", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), new HashSet<>(), -1); } catch (InterruptedException ex) { fail(); return; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java index ef5cd7fc4..5ed8c3fd2 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java @@ -164,7 +164,7 @@ public class ActionScript3DeobfuscatorTest extends ActionScriptTestBase { code.removeTraps(null, 0, b, abc, 0, -1, true, pCode); code.removeLabelsAndDebugLine(b); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); - String actual = b.toSource(new LinkedHashSet<>(), 10, new ArrayList<>(), swf.getAbcIndex(), 0, new HashSet<>()); + String actual = b.toSource(new LinkedHashSet<>(), 10, new ArrayList<>(), swf.getAbcIndex(), 0, new HashSet<>(), -1); actual = actual.replace("\r\n", "\n"); assertEquals(actual, expected); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java index 73ed60872..c4e261b06 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java @@ -136,16 +136,26 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { + " import tests_classes.mypackage2.TestClass;\n" + " import tests_classes.mypackage3.TestClass;\n" + " \n" - + " use namespace myNamespace;" + + " use namespace myNamespace;\n" + " \n" + " public class TestClass2\n" + " {\n" - + " \n" + + " \n" + " public function TestClass2()\n" + " {\n" + " super();\n" + " }\n" + " \n" + + " myNamespace static function testCall5() : String\n" + + " {\n" + + " return \"x\";\n" + + " }\n" + + " \n" + + " protected static function testCall5() : String\n" + + " {\n" + + " return \"5\";\n" + + " }\n" + + " \n" + " public function testCall() : String\n" + " {\n" + " var a:tests_classes.mypackage1.TestClass = null;\n" @@ -154,7 +164,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { + " a = new tests_classes.mypackage1.TestClass();\n" + " b = new tests_classes.mypackage2.TestClass();\n" + " c = new tests_classes.mypackage3.TestClass();\n" - + " var res:String = a.testCall() + b.testCall() + c.testCall() + this.testCall2() + myNamespace::testCall3();\n" + + " var res:String = a.testCall() + b.testCall() + c.testCall() + this.public::testCall2() + this.private::testCall3() + this.protected::testCall4() + protected::testCall5() + this.internal::testCall6() + myNamespace::testCall3();\n" + " trace(res);\n" + " return res;\n" + " }\n" @@ -169,12 +179,38 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { + " return myNamespace::testCall2();\n" + " }\n" + " \n" + + " myNamespace function testCall4() : String\n" + + " {\n" + + " return myNamespace::testCall3();\n" + + " }\n" + + " \n" + + " myNamespace function testCall6() : String\n" + + " {\n" + + " return \"y\";\n" + + " }\n" + + " \n" + " public function testCall2() : String\n" + " {\n" + " return \"2\";\n" + " }\n" + + " \n" + + " private function testCall3() : String\n" + + " {\n" + + " return \"3\";\n" + + " }\n" + + " \n" + + " protected function testCall4() : String\n" + + " {\n" + + " return \"4\";\n" + + " }\n" + + " \n" + + " internal function testCall6() : String\n" + + " {\n" + + " return \"6\";\n" + + " }\n" + " }\n" - + "}"); + + "}\n" + + ""); } @Test diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java index adebed50f..c7d14f88f 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java @@ -166,7 +166,7 @@ public class AS3Generator { callStack.add(b); Set usedDeobfuscations = new LinkedHashSet<>(); b.convert(swf.version, callStack, swf.getAbcIndex(), new ConvertData(), "", ScriptExportMode.AS, false, ((TraitMethodGetterSetter) t).method_info, pack.scriptIndex, classId, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), abc.instance_info.get(classId).instance_traits, true, new HashSet<>(), new ArrayList<>(), usedDeobfuscations); - b.toString(usedDeobfuscations, swf.version, callStack, swf.getAbcIndex(), "", ScriptExportMode.AS, abc, null, src, new ArrayList<>(), new HashSet<>()); + b.toString(usedDeobfuscations, swf.version, callStack, swf.getAbcIndex(), "", ScriptExportMode.AS, abc, null, src, new ArrayList<>(), new HashSet<>(), -1); src.finishHilights(); String[] srcs = src.toString().split("[\r\n]+"); for (int i = 0; i < srcs.length; i++) { 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 e1deee83f150b46911c8d3892398ae8dbb82e37b..75fb1d229281dfac1291363978ea6d1a2eec6ec9 100644 GIT binary patch literal 35304 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

e*PK`mw`@eF56TFD8+Cu|o6x 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

R~7|hGzmdK$L}$D=C_dBMw7i%=6%Y0G{%>zeqeg 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 BKCA!$ 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 81ebeacfd0346c863d5ebecb003bd24aa6f2b19a..4d2f0183b4a81142873c4406afb6da6385195112 100644 GIT binary patch delta 41879 zcmV)KK)S#7KkWH}*7 z59vgXPGtF!Y&rqev8N9K0sfP>0WyCx79E-n)JM!n-$W)s4mKgLgkytKO{@*Q)o5>y>xk zDBdgHe)Zj(H*b`d-d(LM)@w`emdnefr90Spw^6D$mWz$zyT$sdJoumvr=!A)=M>u_mT{NGbL)N_g=kmaUe>JEgz~gYV$lw;83kaD_^7wes~+t%vTYerE~5s+a10JjOYp0v##TgQKKVOxW?K4cri zwl!i~qqa3>Y8u|R7S}}7O#P%tCKGhP=o6X#ago`Fzxzcj9*bx~=vOtJfFTSKyCJZx zn>ZSc8BeBPlSkv{zGpPQBc4n*e?vUEr8R$3EQqqWmx*cGlbgDBGM&-1=5L7wW5Fz& zW$Q^Vj<#pjiBrAiUs=(TRYkO2Xv01 zd52Pq}A$p|{*Sy^t!WrWfMnIDdUv+t2@2VmKp#0lqzO z8o!8sQ~(iE{Jt40%S+YudP8&OL2~sa&VaxrUunH0riLhrMX`UBZfyyoS91`z6I}J# zyfG9RvNeN&5ycO-H4zi>1b({^H-%1rH5>2v0G_638YOK~-^htcV25t%zq5b7xwcrU)gxb-K7D@S)cbq({9Epe9{)z{%*2&56YrimGhtWml-7!s z)t-yR>`JXvzI6D^#No@43h3MV`}jjQYgFzO@ma)Y$!cJFmxjWF=JNUJ;0rwDa3r4_ zUA;XsRhXWhn_AqgtTrm^7;yRYj!$u_&Vp~2z7=+KB5 z6Gl|%hG|9Ys4)9&T_<9tgG@z;OzFM0o?=SXXX_bT2MMzEVOt-y_5HSa+}2OTj_W|5 z0sQrjd=P)9t>l;(--piud=BE1#pe({hw(XrPY$1>_#8Va#wYOilt}l*fPUM$0zxN@ z2>&tdD_TkuR`iP23;Gs`;V=5cZ_=M=5AVe^LtNphVqVeFSr}Igi~u?)(l!Ljv8Mzi9RkEW#fx_(Zu8uhHhG4 z`(CU$Mq|Xav1ZQ`?w+_NR;*^P-08tiq?vm1gh*)Qi~5S)%wQ*)6OUJ7&3@W^QjR^Q z-FS1H2=Ts!1kur)C?{_w#L4FVCpmj1+C1=NYo(`o5Es@#NsV#L{aDjp$Sm}g`=;p& z1ap5Sjbn1+|AHeKFcclgErH|br{!!186C=Sqch8$#vgv!llBz}NI5*o5Ioxkij79C zvUuuL_I{G7bFVenxPF*gb>PXqpT5LZlp-rY{1ig)S1Lr^6sE-&(&_c3Jp9T6uA@<*R#x zPad53$omqX;;OhNt`D?cp1?$484oouAb1o)%1-ngV3Ht;`{%SmD9sQ8sfB15Cu(aD zk&X2^_|YMxIrz~X`~X@OVMiE*88m+bGbUjMr{GPvn9)JA9ua12B3h;vYsPX`{nKWA zD`$P{-o(8O791zHas$71FS8HwUlOl9A~Ca-Gm{n$rE}u-^b|JwaYQ*Kj#EZ(c+i8{ z&{odoQ$}+7>mX|`xc2Al*IOZTq!lue1*>dL(-%R;^dNJ60KW-8k6!@OwJ(3Kt-5%5 zLvm}TXmt21djb}W45UQxnsbFh;?5n20C(=3xmQ|>d=aaOYK;J5eEF?6ZG32TWENMd z?+st9)|N}PY-Rb<;koJA!n^h-8dcotZ4l)3yC#in((PD$H&{$I zRwA|H`f_zmRK7KQQK}Ix^W9%O^p)#3uD)~iEAqFLH`lRDs;-|nnf(zuB9F#yUb}ib zdns@zRxdSff9a-NPu;q4A?ux*t=})ZhqD-mACmIrj2Yum�X*si%Lw;`aNoNq5V= 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 delta 41528 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 A=>Px# diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/mypackage1/TestClass2.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/mypackage1/TestClass2.as index 68c16e441..b07fd5131 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/mypackage1/TestClass2.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/mypackage1/TestClass2.as @@ -13,8 +13,17 @@ b = new tests_classes.mypackage2.TestClass(); var c : tests_classes.mypackage3.TestClass; c = new tests_classes.mypackage3.TestClass(); - var res:String = a.testCall() + b.testCall() + c.testCall() + testCall2() + myNamespace::testCall3(); + var res:String = a.testCall() + + b.testCall() + + c.testCall() + + public::testCall2() + + private::testCall3() + + protected::testCall4() + + protected::testCall5() + + internal::testCall6() + + myNamespace::testCall3(); trace(res); + return res; } @@ -27,10 +36,45 @@ { return myNamespace::testCall2(); } + + myNamespace function testCall4() : String + { + return myNamespace::testCall3(); + } + + myNamespace static function testCall5() : String + { + return "x"; + } + + myNamespace function testCall6() : String + { + return "y"; + } public function testCall2() : String { return "2"; } + + private function testCall3() : String + { + return "3"; + } + + protected function testCall4() : String + { + return "4"; + } + + static protected function testCall5(): String + { + return "5"; + } + + internal function testCall6(): String + { + return "6"; + } } } \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 9e49cee7c..0ff424b09 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -1157,7 +1157,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener getClassTraits(Path className, boolean getStatic, boolean getInstance, boolean getInheritance) { List propertyDefList = new ArrayList<>(); List isStaticList = new ArrayList<>(); - abc.getSwf().getAbcIndex().getClassTraits(new LinkedHashSet<>(), new TypeItem(className.toString()), abc, decompiledTextArea.getScriptIndex(), getStatic, getInstance, getInheritance, propertyDefList, isStaticList); + abc.getSwf().getAbcIndex().getClassTraits(new LinkedHashSet<>(), new TypeItem(className.toString()), abc, decompiledTextArea.getScriptIndex(), getStatic, getInstance, getInheritance, true, true, propertyDefList, isStaticList); List ret = new ArrayList<>(); for (int i = 0; i < propertyDefList.size(); i++) { AbcIndexing.PropertyDef def = propertyDefList.get(i);