Just a simple static getter and setter with a variable can reproduce. private static var _staticProp:String;
public static function get staticProp():String { return _staticProp; } public static function set staticProp(value:String):void { _staticProp = value; } MyClass.staticProp = "hello"; In a release build, the setter wouldn't get called unless I changed it to emit @expose. - Josh On May 28, 2016 9:35 PM, "Alex Harui" <aha...@adobe.com> wrote: > Is there a simple test case? > > On 5/28/16, 2:18 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: > > >Does anyone know a better solution to this? > > > >For some reason, static getters and setters weren't being called properly > >in a release build with ADVANCED_OPTIMIZATIONS. We included @export for > >the > >static properties, which seems to work fine for non-static getters and > >setters. However, for static getters and setters, Closure compiler was > >collapsing the property down to a global variable instead. I switched back > >to @expose, and it started working properly. > > > >The problem is that @expose is deprecated by Closure compiler. Obviously, > >I'd prefer not to use it, but I can't seem to find a working alternative. > >According to the docs [1], @nocollapse is supposed to stop a property from > >being collapsed into a variable. I tried replacing @export with > >@nocollapse, and I tried using both @export and @nocollapse, but it just > >didn't seem to work. > > > >[1] https://developers.google.com/closure/compiler/docs/js-for-compiler > > > >- Josh > > > >On Sat, May 28, 2016 at 2:08 PM, <joshtynj...@apache.org> wrote: > > > >> Repository: flex-falcon > >> Updated Branches: > >> refs/heads/develop b3708662c -> fc4e3af9f > >> > >> > >> compiler-jx: static getters and setters use @expose instead of @export > >> because @export does not work in the release build with > >> ADVANCED_OPTIMIZATIONS > >> > >> > >> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo > >> Commit: > >>http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/fc4e3af9 > >> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/fc4e3af9 > >> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/fc4e3af9 > >> > >> Branch: refs/heads/develop > >> Commit: fc4e3af9f772ab586a75950afce9cc284878c3ff > >> Parents: b370866 > >> Author: Josh Tynjala <joshtynj...@gmail.com> > >> Authored: Sat May 28 14:08:08 2016 -0700 > >> Committer: Josh Tynjala <joshtynj...@gmail.com> > >> Committed: Sat May 28 14:08:08 2016 -0700 > >> > >> ---------------------------------------------------------------------- > >> .../flex/compiler/internal/codegen/js/jx/AccessorEmitter.java | 6 > >>+++++- > >> .../internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java | 4 ++-- > >> 2 files changed, 7 insertions(+), 3 deletions(-) > >> ---------------------------------------------------------------------- > >> > >> > >> > >> > >> > http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc4e3af9/compiler > >>-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/Accesso > >>rEmitter.java > >> ---------------------------------------------------------------------- > >> diff --git > >> > >>a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/ > >>jx/AccessorEmitter.java > >> > >>b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/ > >>jx/AccessorEmitter.java > >> index 7440462..5e7aa50 100644 > >> --- > >> > >>a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/ > >>jx/AccessorEmitter.java > >> +++ > >> > >>b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/ > >>jx/AccessorEmitter.java > >> @@ -340,7 +340,11 @@ public class AccessorEmitter extends JSSubEmitter > >> implements > >> propName); > >> IGetterNode getterNode = p.getter; > >> ISetterNode setterNode = p.setter; > >> - writeNewline("/** @export */"); > >> + // @expose is supposed to be deprecated, so this isn't > >> ideal, > >> + // but @export and/or @nocollapse were not working in a > >> release > >> + // build with ADVANCED_OPTIMIZATIONS, so I don't know > >> what else > >> + // to do. maybe it's a bug in closure compiler... -JT > >> + writeNewline("/** @expose */"); > >> if (getterNode != null) > >> { > >> startMapping(getterNode); > >> > >> > >> > >> > http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc4e3af9/compiler > >>-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/Tes > >>tFlexJSAccessorMembers.java > >> ---------------------------------------------------------------------- > >> diff --git > >> > >>a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/ > >>flexjs/TestFlexJSAccessorMembers.java > >> > >>b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/ > >>flexjs/TestFlexJSAccessorMembers.java > >> index 58769fe..b00d31e 100644 > >> --- > >> > >>a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/ > >>flexjs/TestFlexJSAccessorMembers.java > >> +++ > >> > >>b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/ > >>flexjs/TestFlexJSAccessorMembers.java > >> @@ -86,7 +86,7 @@ public class TestFlexJSAccessorMembers extends > >> TestGoogAccessorMembers > >> IClassNode node = (IClassNode) getNode("public static function > >>get > >> foo():int{return -1;}", > >> IClassNode.class, WRAP_LEVEL_CLASS); > >> asBlockWalker.visitClass(node); > >> - assertOut("/**\n * @constructor\n */\nFalconTest_A = function() > >> {\n};Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ > >> {\n/** @export */\nfoo: {\nget: function() {\n return -1;\n}}}\n);"); > >> + assertOut("/**\n * @constructor\n */\nFalconTest_A = function() > >> {\n};Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ > >> {\n/** @expose */\nfoo: {\nget: function() {\n return -1;\n}}}\n);"); > >> } > >> > >> @Override > >> @@ -136,7 +136,7 @@ public class TestFlexJSAccessorMembers extends > >> TestGoogAccessorMembers > >> IClassNode node = (IClassNode) getNode("public static function > >>set > >> foo(value:int):void{}", > >> IClassNode.class, WRAP_LEVEL_CLASS); > >> asBlockWalker.visitClass(node); > >> - assertOut("/**\n * @constructor\n */\nFalconTest_A = function() > >> {\n};Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ > >> {\n/** @export */\nfoo: {\nset: function(value) {\n}}}\n);"); > >> + assertOut("/**\n * @constructor\n */\nFalconTest_A = function() > >> {\n};Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ > >> {\n/** @expose */\nfoo: {\nset: function(value) {\n}}}\n);"); > >> } > >> > >> @Test > >> > >> > >