diff --git a/CHANGELOG.md b/CHANGELOG.md index 25cba10a8..c487915a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file. - [#1888] AS3 - missing casts in declarations - [#1894] Switch inside loop - [#1801] AS3 - AIR/Flash switching +- [#1892] AS3 - internal modifier after implicit namespace ## [18.3.2] - 2023-01-10 ### Removed diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index d7490075c..dfa455985 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -351,8 +351,7 @@ public abstract class Trait implements Cloneable, Serializable { if (identifier != null && !identifier.isEmpty()) { writer.appendNoHilight(identifier).appendNoHilight(" "); } - } - if (ns != null) { + } else if (ns != null) { String nsPrefix = ns.getPrefix(abc); if (nsPrefix != null && !nsPrefix.isEmpty()) { writer.appendNoHilight(nsPrefix).appendNoHilight(" "); 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 789febd93..3a4a7e11e 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 @@ -378,4 +378,107 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { + " }\n" + "}"); } + + @Test + public void testModifiers() { + decompileScriptPack("standard", "tests_classes.TestModifiers", "package tests_classes\n" + + "{\n" + + " import tests_other.myInternal;\n" + + " import tests_other.myInternal2;\n" + + " \n" + + " public class TestModifiers\n" + + " {\n" + + " \n" + + " private static var attr_stat_private:int = 1;\n" + + " \n" + + " public static var attr_stat_public:int = 2;\n" + + " \n" + + " internal static var attr_stat_internal:int = 3;\n" + + " \n" + + " protected static var attr_stat_protected:int = 4;\n" + + " \n" + + " myInternal static var attr_stat_namespace_explicit:int = 5;\n" + + " \n" + + " myInternal2 static var attr_stat_namespace_implicit:int = 6;\n" + + " \n" + + " \n" + + " private var attr_inst_private:int = 7;\n" + + " \n" + + " public var attr_inst_public:int = 8;\n" + + " \n" + + " internal var attr_inst_internal:int = 9;\n" + + " \n" + + " protected var attr_inst_protected:int = 10;\n" + + " \n" + + " myInternal var attr_inst_namespace_explicit:int = 11;\n" + + " \n" + + " myInternal2 var attr_inst_namespace_implicit:int = 12;\n" + + " \n" + + " public function TestModifiers()\n" + + " {\n" + + " super();\n" + + " }\n" + + " \n" + + " private static function func_stat_private() : int\n" + + " {\n" + + " return 1;\n" + + " }\n" + + " \n" + + " public static function func_stat_public() : int\n" + + " {\n" + + " return 2;\n" + + " }\n" + + " \n" + + " internal static function func_stat_internal() : int\n" + + " {\n" + + " return 3;\n" + + " }\n" + + " \n" + + " protected static function func_stat_protected() : int\n" + + " {\n" + + " return 4;\n" + + " }\n" + + " \n" + + " myInternal static function func_stat_namespace_explicit() : int\n" + + " {\n" + + " return 5;\n" + + " }\n" + + " \n" + + " myInternal2 static function func_stat_namespace_implicit() : int\n" + + " {\n" + + " return 6;\n" + + " }\n" + + " \n" + + " private function func_inst_private() : int\n" + + " {\n" + + " return 7;\n" + + " }\n" + + " \n" + + " public function func_inst_public() : int\n" + + " {\n" + + " return 8;\n" + + " }\n" + + " \n" + + " internal function func_inst_internal() : int\n" + + " {\n" + + " return 9;\n" + + " }\n" + + " \n" + + " protected function func_inst_protected() : int\n" + + " {\n" + + " return 10;\n" + + " }\n" + + " \n" + + " myInternal function func_inst_namespace_explicit() : int\n" + + " {\n" + + " return 11;\n" + + " }\n" + + " \n" + + " myInternal2 function func_inst_namespace_implicit() : int\n" + + " {\n" + + " return 12;\n" + + " }\n" + + " }\n" + + "}"); + } } 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 d405638c4..1bfc6a249 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf differ 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 1f943e3d8..8a02e425d 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestModifiers.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestModifiers.as index c2d26835a..33bbe488a 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestModifiers.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestModifiers.as @@ -1,46 +1,68 @@ package tests_classes { - + import tests_other.myInternal; + import tests_other.myInternal2; + public class TestModifiers { - private var attr_inst_private:int = 1; - public var attr_inst_public:int = 2; - internal var attr_inst_internal:int = 3; - protected var attr_inst_protected:int = 4; + private static var attr_stat_private:int = 1; + public static var attr_stat_public:int = 2; + internal static var attr_stat_internal:int = 3; + protected static var attr_stat_protected:int = 4; + myInternal static var attr_stat_namespace_explicit:int = 5; + myInternal2 static var attr_stat_namespace_implicit:int = 6; + + + private var attr_inst_private:int = 7; + public var attr_inst_public:int = 8; + internal var attr_inst_internal:int = 9; + protected var attr_inst_protected:int = 10; + myInternal var attr_inst_namespace_explicit:int = 11; + myInternal2 var attr_inst_namespace_implicit:int = 12; - private static var attr_stat_private:int = 5; - public static var attr_stat_public:int = 6; - internal static var attr_stat_internal:int = 7; - protected static var attr_stat_protected:int = 8; - private function func_inst_private():int { + + private static function func_stat_private():int { return 1; - } - public function func_inst_public():int { + } + public static function func_stat_public():int { return 2; - } - internal function func_inst_internal():int { + } + internal static function func_stat_internal():int { return 3; - } - protected function func_inst_protected():int { + } + protected static function func_stat_protected():int { return 4; } - private static function func_stat_private():int { - return 5; + myInternal static function func_stat_namespace_explicit():int { + return 5; } - public static function func_stat_public():int { - return 6; + + myInternal2 static function func_stat_namespace_implicit():int { + return 6; } - internal static function func_stat_internal():int { + + + private function func_inst_private():int { return 7; - } - protected static function func_stat_protected():int { - return 8; + } + public function func_inst_public():int { + return 8; + } + internal function func_inst_internal():int { + return 9; + } + protected function func_inst_protected():int { + return 10; } + myInternal function func_inst_namespace_explicit():int { + return 11; + } - - + myInternal2 function func_inst_namespace_implicit():int { + return 12; + } } }