Andy Dufilie created FLEX-34991:
-----------------------------------

             Summary: Problem with setter/getter in .as file with multiple 
classes
                 Key: FLEX-34991
                 URL: https://issues.apache.org/jira/browse/FLEX-34991
             Project: Apache Flex
          Issue Type: Bug
          Components: Falcon, FlexJS
    Affects Versions: Apache FlexJS 0.5.0
            Reporter: Andy Dufilie
            Priority: Minor


Internal classes local to another class (defined outside the package 
definition) get cross-compiled incorrectly when there are setter/getters in the 
main class. Notice in the example below that the PublicClass setter/getter are 
included in the InternalClass prototype at the bottom.

AS input:
{code}
package foo.bar {
        public class PublicClass {
                public function get publicVar():String {
                        return _publicVar;
                }
                public function set publicVar(value:String):void {
                        _publicVar = value;
                }
                
                private var _publicVar:String = "from public class";
        }
}

internal class InternalClass {
        public function get internalVar():String {
                return _internalVar;
        }
        public function set internalVar(value:String):void {
                _internalVar = value;
        }
        
        private var _internalVar:String = "from internal class";
}
{code}

Incorrect JS output:
{code}
/**
 * Generated by Apache Flex Cross-Compiler from foo\bar\PublicClass.as
 * foo.bar.PublicClass
 *
 * @fileoverview
 *
 * @suppress {checkTypes}
 */

goog.provide('foo.bar.PublicClass');



/**
 * @constructor
 */
foo.bar.PublicClass = function() {
};


/**
 * @private
 * @type {string}
 */
foo.bar.PublicClass.prototype._publicVar = "from public class";


Object.defineProperties(foo.bar.PublicClass.prototype, /** @lends 
{foo.bar.PublicClass.prototype} */ {
/** @export */
publicVar: {
get: /** @this {foo.bar.PublicClass} */ function() {
  return this._publicVar;
},
set: /** @this {foo.bar.PublicClass} */ function(value) {
  this._publicVar = value;
}}}
);


/**
 * Metadata
 *
 * @type {Object.<string, Array.<Object>>}
 */
foo.bar.PublicClass.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 
'PublicClass', qName: 'foo.bar.PublicClass'}] };



/**
 * @constructor
 */
InternalClass = function() {
};


/**
 * @private
 * @type {string}
 */
InternalClass.prototype._internalVar = "from internal class";


Object.defineProperties(InternalClass.prototype, /** @lends 
{InternalClass.prototype} */ {
/** @export */
publicVar: {
get: /** @this {InternalClass} */ function() {
  return this._publicVar;
},
set: /** @this {InternalClass} */ function(value) {
  this._publicVar = value;
}},
/** @export */
internalVar: {
get: /** @this {InternalClass} */ function() {
  return this._internalVar;
},
set: /** @this {InternalClass} */ function(value) {
  this._internalVar = value;
}}}
);
{code}




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to